TCH (statz) | #1, Főfasz (10466) |
2068 | #4787 | ^ | Idézet | Mon, 15 Jan 2018 18:52:29 +01 |
94.21.*.* | *.pool.digikabel.hu |
Adott egy futtatható bináris, amit nem csomagkezelőből telepítettünk. Nem akar elindulni a hiányzó függőségek miatt, de mivel nem csomagból van így a szükséges csomagokat max. úgy lehet összeszedni, hogy objdump-pal kiolvassuk a libeket, aztán egyesével megnézetjük a csomagkezelővel, hogy melyik csomag tartalmazza azt. Ezt én most automatizáltam magamnak (Debian-ra), akinek kell viheti, átírhatja másik csomagkezelőre, mittudomén...#!/bin/sh
if [ ! -f "$1" ]; then
echo "Usage: lsdeppkg <ELF-FILE>"
exit
fi
DISTRO=`cat /etc/*-release | awk -F '"' '/NAME/ {print $2; exit}'`
TMP=$(mktemp /tmp/deplst-XXXXXX)
PKGS=""
objdump -p "$1" | grep "NEEDED" > "$TMP"
while IFS= read -r file; do
file=`echo "$file" | awk -F ' ' '{print $2}'`
if [ "$DISTRO" == "Arch Linux" ]; then
PKG=`pacman -Fsq "$file"`
if [ "$PKG" != "" ]; then
PKG=`echo "$PKG" | head -1`
fi
else
PKG=`dpkg -S "$file" 2>/dev/null`
if [ "$PKG" != "" ]; then
PKG=`echo "$PKG" | cut -f1 -d":"`
fi
fi
if [ "$PKG" == "" ]; then
(>&2 echo "$file: No match.")
else
PKGS="$PKGS$PKG\n"
fi
done < "$TMP"
rm "$TMP"
echo "Packages:"
echo "$PKGS" | sort | uniq | tr '\n' ' '
echo "" A script az összeszedett csomagokat a végén egybe köpi ki (szóközökkel elválasztva), akár át is lehet dobni a csomagkezelőnek; az olyan libeket viszont menet közben írja ki az stderr-re, amikhez nem talált csomagot.Építő jellegű javaslatokat szívesen fogadok egyszerűsítésre, optimalizációra, vagy akármi másra. Sz*rk: zolk3ri kolléga már küldött is egy patchet, amiben a temp fájl nevét mktemp-pel állítja elő és az Arch pacman-jét is támogatja. |