mkimage-unittest.sh 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #!/usr/bin/env bash
  2. # Generate a very minimal filesystem based on busybox-static,
  3. # and load it into the local docker under the name "docker-ut".
  4. missing_pkg() {
  5. echo "Sorry, I could not locate $1"
  6. echo "Try 'apt-get install ${2:-$1}'?"
  7. exit 1
  8. }
  9. BUSYBOX=$(which busybox)
  10. [ "$BUSYBOX" ] || missing_pkg busybox busybox-static
  11. SOCAT=$(which socat)
  12. [ "$SOCAT" ] || missing_pkg socat
  13. shopt -s extglob
  14. set -ex
  15. ROOTFS=`mktemp -d ${TMPDIR:-/var/tmp}/rootfs-busybox.XXXXXXXXXX`
  16. trap "rm -rf $ROOTFS" INT QUIT TERM
  17. cd $ROOTFS
  18. mkdir bin etc dev dev/pts lib proc sys tmp
  19. touch etc/resolv.conf
  20. cp /etc/nsswitch.conf etc/nsswitch.conf
  21. echo root:x:0:0:root:/:/bin/sh > etc/passwd
  22. echo daemon:x:1:1:daemon:/usr/sbin:/bin/sh >> etc/passwd
  23. echo root:x:0: > etc/group
  24. echo daemon:x:1: >> etc/group
  25. ln -s lib lib64
  26. ln -s bin sbin
  27. cp $BUSYBOX $SOCAT bin
  28. for X in $(busybox --list)
  29. do
  30. ln -s busybox bin/$X
  31. done
  32. rm bin/init
  33. ln bin/busybox bin/init
  34. cp -P /lib/x86_64-linux-gnu/lib{pthread*,c*(-*),dl*(-*),nsl*(-*),nss_*,util*(-*),wrap,z}.so* lib
  35. cp /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 lib
  36. cp -P /usr/lib/x86_64-linux-gnu/lib{crypto,ssl}.so* lib
  37. for X in console null ptmx random stdin stdout stderr tty urandom zero
  38. do
  39. cp -a /dev/$X dev
  40. done
  41. chmod 0755 $ROOTFS # See #486
  42. tar --numeric-owner -cf- . | docker import - docker-ut
  43. docker run -i -u root docker-ut /bin/echo Success.
  44. rm -rf $ROOTFS