#!/bin/bash -e INDEX_DIR="/var/lib/scratchpkg/index" PKG=( linux-api-headers man-pages glibc tzdata zlib file readline m4 bc binutils gmp mpfr libmpc gcc bzip2 pkg-config ncurses attr acl libcap sed shadow psmisc iana-etc bison flex grep bash libtool gdbm gperf expat inetutils perl perl-xml-parser intltool autoconf automake xz kmod gettext elfutils procps-ng e2fsprogs coreutils diffutils gawk findutils groff grub less gzip iproute2 kbd libpipeline make patch sysklogd sysvinit eudev util-linux man-db tar texinfo vim filesystem base-meta openssl ca-certificates-utils ca-certificates wget curl httpup scratchpkg rc-init ) adjustingtoolchain() { echo "Adjusting toolchain" mv -v /tools/bin/{ld,ld-old} mv -v /tools/$(uname -m)-pc-linux-gnu/bin/{ld,ld-old} mv -v /tools/bin/{ld-new,ld} ln -sv /tools/bin/ld /tools/$(uname -m)-pc-linux-gnu/bin/ld gcc -dumpspecs | sed -e 's@/tools@@g' \ -e '/\*startfile_prefix_spec:/{n;s@.*@/usr/lib/ @}' \ -e '/\*cpp:/{n;s@$@ -isystem /usr/include@}' > \ `dirname $(gcc --print-libgcc-file-name)`/specs echo 'int main(){}' > dummy.c cc dummy.c -v -Wl,--verbose &> dummy.log readelf -l a.out | grep ': /lib' grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log grep -B1 '^ /usr/include' dummy.log grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g' grep "/lib.*/libc.so.6 " dummy.log grep found dummy.log rm -v dummy.c a.out dummy.log sleep 5 } for i in ${PKG[@]}; do if [[ -d "$INDEX_DIR/$i" ]]; then echo "$i is installed" else echo echo "Installing $i..." case $i in glibc) ln -sfv /tools/lib/gcc /usr/lib ln -sfv /tools/bin/m4 /usr/bin scratch -i -id -p $i || exit 1 adjustingtoolchain rm /usr/lib/gcc rm /usr/bin/m4 ;; bc) ln -sfv /tools/lib/libncursesw.so.6 /usr/lib/libncursesw.so.6 ln -sfv libncurses.so.6 /usr/lib/libncurses.so scratch -i -id -p $i || exit 1 rm /usr/lib/{libncurses.so,libncursesw.so.6} ;; gcc) scratch -id -p $i || exit 1 rm -f /usr/lib/{libgcc_s.so{,.1},libstdc++.{a,so{,.6}}} scratch -i -id -p $i || exit 1 ;; bash|coreutils|filesystem|scratchpkg) # scratchpkg is hardly depends on bash and coreutils # so, ignore conflict, mean just replacing the files scratch -ic -i -id -p $i || exit 1 ;; perl) echo "127.0.0.1 localhost $(hostname)" > /etc/hosts scratch -id -p $i || exit 1 rm /etc/hosts rm /usr/bin/perl scratch -i -id -p $i || exit 1 ;; base-meta) scratch -i -p $i || exit 1 ;; *) scratch -i -id -p $i || exit 1 ;; esac fi done exit 0