You are not logged in.
Pages: 1
I tried to install oracle clients (10201_client_linux32.zip, linux_11gR2_client.zip), and like others got this error:
libclntsh.so: undefined reference to `ntusini'
Here's the solution:
Unzip the directory 'client'
Make sure your current directory contains 'client'
run this script: makepatches :
#!/bin/bash
set -e
fn_findcandidates() {
rm -rf candidates && mkdir candidates
set "*.mk" "*/*.mk" \
"deinstall" "*/deinstall" \
"init.cssd" "*/init.cssd" \
"gennttab" "*/gennttab" \
"genagtsh" "*/genagtsh" \
"localconfig.sbs" "*/localconfig.sbs"
local i=0
find client -name "*.jar" | while read -r jarpath; do
LANG=C unzip -qq -l "$jarpath" "$@" | {
set --
while read -r x d t f; do
case "$d $t" in
????-??-??' '??:??)
if unzip -p "$jarpath" "$f" | grep "/usr/bin/awk\|/bin/basename\|/usr/bin/tr" >/dev/null; then
set -- "$@" "$f"
fi
;;
esac
done
if [ $# -gt 0 ]; then
echo "$@"
mkdir -p candidates/$i/old
echo "$jarpath" > candidates/$i/jar.txt
unzip -o -d candidates/$i/old "$jarpath" "$@"
cp -r candidates/$i/old candidates/$i/new
fi
}
[ ! -d "candidates/$i" ] || i=$((i+1))
done
}
fn_autopatchcandidates() {
(
cd candidates
# replace AWK=/usr/bin/awk
for d in *; do
find "$d/new" -type f | xargs sed -i -e '/PLATFORM = .Linux./!b; :m1; n' -e 's|AWK=.*/bin/awk|AWK=/bin/awk|;t;b m1' || true
done
for d in *; do
find "$d/new" -type f | xargs sed -i -e '/\(PLATFORM = .SunOS.\|else\)/!b; :m1; n' -e 's|AWK=.*/usr.*/bin/awk|AWK="/usr"/bin/awk|;t;b m1' || true
done
# replace /usr/bin/tr
for d in *; do
find "$d/new" -name "*.mk" | xargs sed -i "s|^TR=/usr/bin/tr$|TR=/bin/tr|" 2>/dev/null || true
done
for d in *; do
find "$d/new" -type f | xargs sed -i -e 's|\(.Linux. = ./bin/uname. . .. \)TR=/usr/bin/tr|\1TR=/bin/tr|' -e 's|\(on linux tr is at \)/usr/bin/tr|\1/bin/tr|' || true
done
for d in *; do
find "$d/new" -type f | xargs sed -i 's|\(-z ..TR. .. then TR=.\)/usr/bin/tr|\1/bin/tr|' || true
done
# replace /bin/basename
for d in *; do
find "$d/new" -type f | xargs sed -i 's|`/bin/basename |`basename |' || true
done
for d in *; do
find "$d/new" -name init.cssd | xargs sed -i 's|BASENAME=/bin/basename|BASENAME=basename|' 2>/dev/null || true
done
for d in *; do
find "$d/new" -type f | xargs sed -i 's|\(-z ..BASENAME. .. then BASENAME=.\)/bin/basename|\1basename|' || true
done
#for d in *; do
# diff -ur $d/old $d/new || true
#done
)
}
if true; then
# find in archives
fn_findcandidates
# try to replace known patterns
fn_autopatchcandidates
# check remaining
for d in candidates/*; do
if grep -R "/usr/bin/awk\|/bin/basename\|/usr/bin/tr" "$d/new"; then
echo "some bad paths remaining"
return 1
fi
done
# make patches
( rm -rf patches && mkdir patches
cd candidates
for d in *; do
( cd $d && cat jar.txt && ( diff -ur old new || true) ) >../patches/$d.patch
done
)
fi
It will create and fill directory 'patches'. You can put the patches to your source pkg or whatever.
Then run another script: applypatches :
#!/bin/bash
set -e
fn_patchzip() {
local patchfile="$1"
local zipfile=`head -1 "$patchfile"`
local errors=
mkdir -p tmp
cat "$patchfile" | sed -e 's|^+++ new/\([^ ]*\).*|\1|;t;D' | {
set --
while read -r f; do
set -- "$@" "$f"
done
test "$1" || {
echo "fn_patchzip: invalid patch" >&2
return 1
}
unzip -o -d tmp "$zipfile" "$@" >/dev/null
patchfile=$(cd $(dirname -- "$patchfile") && pwd)/$(basename -- "$patchfile")
zipfile=$(cd $(dirname -- "$zipfile") && pwd)/$(basename -- "$zipfile")
cd tmp
if errors="`patch -Np1 -i "$patchfile" 2>&1`"; then
zip "$zipfile" "$@"
else
patch -Np1 -R -i "$patchfile" >/dev/null 2>&1 || {
echo "$errors" >&2
return 1
}
fi
} || return 1
}
for p in patches/*; do
fn_patchzip "$p"
done
When new oracle version released, makepatches must be modified
Last edited by leniviy (2011-02-27 12:19:20)
Arch 64, xfce4
Offline
Pages: 1