mkimage-crux.sh 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #!/usr/bin/env bash
  2. # Generate a minimal filesystem for CRUX/Linux and load it into the local
  3. # docker as "cruxlinux"
  4. # requires root and the crux iso (http://crux.nu)
  5. set -e
  6. die () {
  7. echo >&2 "$@"
  8. exit 1
  9. }
  10. [ "$#" -eq 1 ] || die "1 argument(s) required, $# provided. Usage: ./mkimage-crux.sh /path/to/iso"
  11. ISO=${1}
  12. ROOTFS=$(mktemp -d ${TMPDIR:-/var/tmp}/rootfs-crux-XXXXXXXXXX)
  13. CRUX=$(mktemp -d ${TMPDIR:-/var/tmp}/crux-XXXXXXXXXX)
  14. TMP=$(mktemp -d ${TMPDIR:-/var/tmp}/XXXXXXXXXX)
  15. VERSION=$(basename --suffix=.iso $ISO | sed 's/[^0-9.]*\([0-9.]*\).*/\1/')
  16. # Mount the ISO
  17. mount -o ro,loop $ISO $CRUX
  18. # Extract pkgutils
  19. tar -C $TMP -xf $CRUX/tools/pkgutils#*.pkg.tar.gz
  20. # Put pkgadd in the $PATH
  21. export PATH="$TMP/usr/bin:$PATH"
  22. # Install core packages
  23. mkdir -p $ROOTFS/var/lib/pkg
  24. touch $ROOTFS/var/lib/pkg/db
  25. for pkg in $CRUX/crux/core/*; do
  26. pkgadd -r $ROOTFS $pkg
  27. done
  28. # Remove agetty and inittab config
  29. if (grep agetty ${ROOTFS}/etc/inittab 2>&1 > /dev/null); then
  30. echo "Removing agetty from /etc/inittab ..."
  31. chroot ${ROOTFS} sed -i -e "/agetty/d" /etc/inittab
  32. chroot ${ROOTFS} sed -i -e "/shutdown/d" /etc/inittab
  33. chroot ${ROOTFS} sed -i -e "/^$/N;/^\n$/d" /etc/inittab
  34. fi
  35. # Remove kernel source
  36. rm -rf $ROOTFS/usr/src/*
  37. # udev doesn't work in containers, rebuild /dev
  38. DEV=$ROOTFS/dev
  39. rm -rf $DEV
  40. mkdir -p $DEV
  41. mknod -m 666 $DEV/null c 1 3
  42. mknod -m 666 $DEV/zero c 1 5
  43. mknod -m 666 $DEV/random c 1 8
  44. mknod -m 666 $DEV/urandom c 1 9
  45. mkdir -m 755 $DEV/pts
  46. mkdir -m 1777 $DEV/shm
  47. mknod -m 666 $DEV/tty c 5 0
  48. mknod -m 600 $DEV/console c 5 1
  49. mknod -m 666 $DEV/tty0 c 4 0
  50. mknod -m 666 $DEV/full c 1 7
  51. mknod -m 600 $DEV/initctl p
  52. mknod -m 666 $DEV/ptmx c 5 2
  53. IMAGE_ID=$(tar --numeric-owner -C $ROOTFS -c . | docker import - crux:$VERSION)
  54. docker tag $IMAGE_ID crux:latest
  55. docker run -i -t crux echo Success.
  56. # Cleanup
  57. umount $CRUX
  58. rm -rf $ROOTFS
  59. rm -rf $CRUX
  60. rm -rf $TMP