LPS:Linux/Oracle instalace na Debian12
(zrevidováno i pro Debian 13)
PREREKVIZITY
V Debianu 12
apt-get install libaio1
v Debianu 13
apt-get install libaio1t64
ln -sf /lib/x86_64-linux-gnu/libaio.so.1t64.0.2 /lib/x86_64-linux-gnu/libaio.so.1
Odtud už stejně
apt-get install x11-utils
apt-get install libaio-dev
nastavit ORACLE_HOME a vygenerovat
$ORACLE_HOME/bin$ ./genclntsh
$ORACLE_HOME/bin$ ./genclntst
do /usr/lib64 nakopírovat knihovny
libc_nonshared.a
libpthread.a
libpthread_nonshared.a
mkdir $ORACLE_HOME/precomp/lib/proc
Jak vyřešit 'undefined reference to'
Jestli se jedná o systémovou nebo oracle knihovnu se nedá rozhodnout, je třeba hledat. Snažší je to najít v oraclu, pak v systému.
Použij starou knihovnu
Oracle používá zastaralou knihovnu libc_nonshared.a z balíku libc6-dev, maximálně ovšem ve verzi 2.31, ve verzi 2.36 již chybí některé věci, které nelze dohledat, typicky:
undefined reference to `stat'
Oracle knihovna
Linker vypisuje třeba:
/usr/bin/ld: kpusp.c:(text.unlikely+0x7021): undefined reference to `sltsmnta'
Zkusime najít, kde je:
$ cd /home/oracle/sw/product/19.3.0.0/lib $ nm -o *.a 2>/dev/null |grep ' sltsmnta$' |grep -v U libclntst19.a:core19_sltsm.o:0000000000000130 T sltsmnta libcore19.a:sltsm.o:0000000000000130 T sltsmnta
Teď stačí linkeru přidat -lclntst19 (-l nahrazuje lib ve jménu souboru) a nechat znovu instalator opakovat akci.
Pokud se to nenajde, je možné prohledat všechny adresáře:
$ find . -name '*.a' -type f -print -exec nm -o {} \; |grep ' sltsmnta$'
Systémová knihovna
Linker vypisuje typicky takovou hlášku:
/usr/bin/ld: /home/oracle/sw/product/19.3.0.0/lib//libnnzst19.a(ccme_ck_rand_load_fileS1.o): in function `r_ck_random_load_file': ck_rand_load_file.c:(.text+0xd4): undefined reference to `stat'
Nejsnazší je řetězec zadat do google, pokud nic nenajde, pak hledat v /usr/lib/x86_64-linux-gnu/.
Poznámky
- nemá smysl upravovat
/etc/ld.so.conf.d/a pouštětldconfig, ikdyž to na mnoha místech radí
Další pomocníci
strings --print-file-name * |grep naeetauldd
KONKRÉTNÍ UPRAVENÉ SOUBORY
Aktuální verzi najdete zde: /afs/zcu.cz/project/departments/civ/oracle-install/debian/debian_12
v orald nechat jen
exec gcc -no-pie "$@"
exit
$ORACLE_HOME/plsql/lib/ins_plsql.mk
$ORACLE_HOME/rdbms/lib/ins_rdbms.mk
$ORACLE_HOME/sqlplus/lib/ins_plsql.mk
$ORACLE_HOME/network/lib/ins_net_server.mk
$ORACLE_HOME/rdbms/lib/env_rdbms.mk
PATCHOVÁNí
Při patchování se bohužel projeví ještě bug popsaný zde
https://support.oracle.com/epmos/faces/DocContentDisplay?id=33865116.8
Jde o to, že v některých instalačních balíčkách základní verze (19.3.) je špatná verze knihovny $HOME_ORACLE/rdbms/lib/libknlopt.a.
Týká se i námi používaného souboru LINUX.X64_193000_db_home.zip. Je potřeba tento soubor nahradit ideálně hned po instalaci souborem z jiného instalačního balíčku např. oracle-database-ee-19c-1.0-1.x86_64.rpm. Špatná verze se projevuje při rekompilaci chybami typu
drstx.c:(.text+0x680): undefined reference to `kciCreateLob'
/usr/bin/ld: drstx.c:(.text+0x694): undefined reference to `kciGetClobFromCSXLoc'