#!/bin/sh # # Generate a minimal filesystem for PLD Linux and load it into the local docker as "pld". # https://www.pld-linux.org/packages/docker # set -e if [ "$(id -u)" != "0" ]; then echo >&2 "$0: requires root" exit 1 fi image_name=pld tmpdir=$(mktemp -d ${TMPDIR:-/var/tmp}/pld-docker-XXXXXX) root=$tmpdir/rootfs install -d -m 755 $root # to clean up: docker rmi $image_name || : # build rpm -r $root --initdb set +e install -d $root/dev/pts mknod $root/dev/random c 1 8 -m 644 mknod $root/dev/urandom c 1 9 -m 644 mknod $root/dev/full c 1 7 -m 666 mknod $root/dev/null c 1 3 -m 666 mknod $root/dev/zero c 1 5 -m 666 mknod $root/dev/console c 5 1 -m 660 set -e poldek -r $root --up --noask -u \ --noignore \ -O 'rpmdef=_install_langs C' \ -O 'rpmdef=_excludedocs 1' \ vserver-packages \ bash iproute2 coreutils grep poldek # fix netsharedpath, so containers would be able to install when some paths are mounted sed -i -e 's;^#%_netsharedpath.*;%_netsharedpath /dev/shm:/sys:/proc:/dev:/etc/hostname;' $root/etc/rpm/macros # no need for alternatives poldek-config -c $root/etc/poldek/poldek.conf ignore systemd-init # this makes initscripts to believe network is up touch $root/var/lock/subsys/network # cleanup large optional packages remove_packages="ca-certificates" for pkg in $remove_packages; do rpm -r $root -q $pkg && rpm -r $root -e $pkg --nodeps done # cleanup more rm -v $root/etc/ld.so.cache rm -rfv $root/var/cache/hrmib/* rm -rfv $root/usr/share/man/man?/* rm -rfv $root/usr/share/locale/*/ rm -rfv $root/usr/share/help/*/ rm -rfv $root/usr/share/doc/* rm -rfv $root/usr/src/examples/* rm -rfv $root/usr/share/pixmaps/* # and import tar --numeric-owner --xattrs --acls -C $root -c . | docker import - $image_name # and test docker run -i -u root $image_name /bin/echo Success. rm -r $tmpdir