LPS:Linux/Oracle instalace na Debian12

Z HelpDesk

PREREKVIZITY

apt-get install x11-utils

apt-get install libaio1

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ět ldconfig, ikdyž to na mnoha místech radí

Další pomocníci

  • strings --print-file-name * |grep naeetau
  • ldd

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

$(WRAP_LINKLINE) -lclntst19 -lresolv

$ORACLE_HOME/rdbms/lib/ins_rdbms.mk

$(ORION_LINKLINE) -lclntst19 -lclntshcore -lhasgen19 -locr19  -lnnz19 -laio

$(ORAPWD_LINKLINE) -lclntst19 -ldl -lasmclntsh19 -lcell19 -lsvml

$(TKPROF_LINKLINE) -lclntst19 -lresolv

$(SYSRESVER_LINKLINE) -lm

$(PLSHPROF_LINKLINE)  -lclntst19 -lresolv

$(EXTPROC_LINKLINE) -lclntst19 -ldl -lm -lrt

$(HSDEPXA_LINKLINE) -lclntst19 -ldl -lm -lrt

$(HSOTS_LINKLINE) -lclntst19 -ldl -lm -lrt

$(AMDU_LINKLINE) -lclntst19 -ldl -lpthread

$(KFNDG_LINKLINE) -lclntst19 -ldl -lpthread

$(KFNDG_LINKLINE) -lclntst19 -ldl -lpthread

$ORACLE_HOME/sqlplus/lib/ins_plsql.mk

$(SQLPLUS_LINKLINE) -lclntst19

$ORACLE_HOME/network/lib/ins_net_server.mk

$(TNSLSNR_LINKLINE) -lclntst19

$(LSNRCTL_LINKLINE) -lclntst19 -lresolv -ldl -lpthread -lrt

$ORACLE_HOME/rdbms/lib/env_rdbms.mk

ORACLE_LINKLINE=$(ORACLE_LINKER) $(PL_FLAGS) -Wl,--no-as-needed  $(ORAMAI) $(SSORED) $(TTCSOI) \

ORION_LINKLINE=$(LINK) $(OPT) -Wl,--no-as-needed  $(ORIONMAI) $(LLIBORION) $(LLIBCLNTSH) \

ORAPWD_LINKLINE=$(LINK) $(OPT) -Wl,--no-as-needed $(PWDMAI) $(PWDCLSR) $(SSDBED) $(ASMCLNTSH_LIBS) $(HAS_SKGXNLIBS) $(LLIBHASGEN) $(LLIBO

KFNDG_LINKLINE=$(LINK) $(S0MAIN) -Wl,--no-as-needed $(SSKFNDGED) $(SKFNDGPT) $(KFNDGOBJ) \

AMDU_LINKLINE=$(LINK) $(S0MAIN) -Wl,--no-as-needed $(SSKFMUED) $(SKFMUPT) $(LLIBCLNTSH) \