mkimage-pld.sh 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #!/bin/sh
  2. #
  3. # Generate a minimal filesystem for PLD Linux and load it into the local docker as "pld".
  4. # https://www.pld-linux.org/packages/docker
  5. #
  6. set -e
  7. if [ "$(id -u)" != "0" ]; then
  8. echo >&2 "$0: requires root"
  9. exit 1
  10. fi
  11. image_name=pld
  12. tmpdir=$(mktemp -d ${TMPDIR:-/var/tmp}/pld-docker-XXXXXX)
  13. root=$tmpdir/rootfs
  14. install -d -m 755 $root
  15. # to clean up:
  16. docker rmi $image_name || :
  17. # build
  18. rpm -r $root --initdb
  19. set +e
  20. install -d $root/dev/pts
  21. mknod $root/dev/random c 1 8 -m 644
  22. mknod $root/dev/urandom c 1 9 -m 644
  23. mknod $root/dev/full c 1 7 -m 666
  24. mknod $root/dev/null c 1 3 -m 666
  25. mknod $root/dev/zero c 1 5 -m 666
  26. mknod $root/dev/console c 5 1 -m 660
  27. set -e
  28. poldek -r $root --up --noask -u \
  29. --noignore \
  30. -O 'rpmdef=_install_langs C' \
  31. -O 'rpmdef=_excludedocs 1' \
  32. vserver-packages \
  33. bash iproute2 coreutils grep poldek
  34. # fix netsharedpath, so containers would be able to install when some paths are mounted
  35. sed -i -e 's;^#%_netsharedpath.*;%_netsharedpath /dev/shm:/sys:/proc:/dev:/etc/hostname;' $root/etc/rpm/macros
  36. # no need for alternatives
  37. poldek-config -c $root/etc/poldek/poldek.conf ignore systemd-init
  38. # this makes initscripts to believe network is up
  39. touch $root/var/lock/subsys/network
  40. # cleanup large optional packages
  41. remove_packages="ca-certificates"
  42. for pkg in $remove_packages; do
  43. rpm -r $root -q $pkg && rpm -r $root -e $pkg --nodeps
  44. done
  45. # cleanup more
  46. rm -v $root/etc/ld.so.cache
  47. rm -rfv $root/var/cache/hrmib/*
  48. rm -rfv $root/usr/share/man/man?/*
  49. rm -rfv $root/usr/share/locale/*/
  50. rm -rfv $root/usr/share/help/*/
  51. rm -rfv $root/usr/share/doc/*
  52. rm -rfv $root/usr/src/examples/*
  53. rm -rfv $root/usr/share/pixmaps/*
  54. # and import
  55. tar --numeric-owner --xattrs --acls -C $root -c . | docker import - $image_name
  56. # and test
  57. docker run -i -u root $image_name /bin/echo Success.
  58. rm -r $tmpdir