dragora_chroot 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. #!/bin/sh -
  2. #set -x
  3. # Use at own RISK !
  4. # if you want to use an existing packages directory from dragora CD
  5. # mount it and cp -a /mountpoint/packages $pkg_dir (= /tmp/chroot_pkg per default)
  6. # this should probably be added but for now lets keep it simple :)
  7. # In short: make sure you are happy with $chroot_dir and pkg_dir and pkg_list.
  8. # 1) VARIABLES
  9. # 2) TESTS root and lftp
  10. # 3) FUNCTIONS
  11. # 4) OPTIONS (c,h,m - create_chroot, help, mount_chroot)
  12. #-----------------------------------
  13. #-----------------------------------
  14. # VARIABLES
  15. #-----------------------------------
  16. chroot_dir="/media/dragora_chroot"
  17. pkg_dir="/tmp/dragora_chroot_pkg"
  18. pkg_count=$(find "$pkg_dir" -name '*tlz' | wc -l)
  19. option="$1" #needed for getopts, as $@ is used for repo_list (posix)
  20. set -- 'http://gungre.ch/dragora/mirror/v2/packages/base' \
  21. 'http://gungre.ch/dragora/mirror/v2/packages/devel' \
  22. 'http://gungre.ch/dragora/mirror/v2/packages/libraries' \
  23. 'http://gungre.ch/dragora/mirror/v2/packages/modules' \
  24. 'http://gungre.ch/dragora/mirror/v2/packages/networking' \
  25. 'http://gungre.ch/dragora/mirror/v2/packages/tools'
  26. #skipped packages:
  27. #http://gungre.ch/dragora/mirror/v2/packages/java
  28. #http://gungre.ch/dragora/mirror/v2/packages/kernel
  29. #http://gungre.ch/dragora/mirror/v2/packages/media
  30. #http://gungre.ch/dragora/mirror/v2/packages/printing
  31. #http://gungre.ch/dragora/mirror/v2/packages/scanner
  32. #http://gungre.ch/dragora/mirror/v2/packages/x-applications
  33. #http://gungre.ch/dragora/mirror/v2/packages/x-libraries
  34. #http://gungre.ch/dragora/mirror/v2/packages/x-xfce
  35. #http://gungre.ch/dragora/mirror/v2/packages/x-xfce-goodies
  36. #http://gungre.ch/dragora/mirror/v2/packages/x-xfce-xorg
  37. #----------------------------------
  38. #-----------------------------------
  39. # TESTS
  40. #-----------------------------------
  41. # test root
  42. if [ "$(id -u )" != 0 ]
  43. then
  44. printf "\nrun as root\n"
  45. exit 1
  46. fi
  47. if ! command -v lftp >/dev/null;
  48. then printf "dep lftp missing\n";
  49. exit 1;
  50. fi
  51. #----------------------------------
  52. #----------------------------------
  53. # FUNCTIONS
  54. #-----------------------------------
  55. # usage
  56. usage () {
  57. printf "%s \n" \
  58. " " \
  59. " Usage: dragora_chroot [options]" \
  60. " " \
  61. " -c " \
  62. " create dragora chroot at:" \
  63. " default chroot_dir: " " $chroot_dir" \
  64. " from " \
  65. " default pkg_dir: " " $pkg_dir" \
  66. " " \
  67. " - Edit variables to change default" \
  68. " - mount iso and cp -a packages-directory to pkg_dir " \
  69. " - $pkg_dir" \
  70. " - to avoid downloading from repo" \
  71. " " \
  72. " -m " \
  73. " mount dev, sys, proc for chroot_dir" \
  74. " chroot chroot_dir" \
  75. " Edit chroot_dir to change default" " $chroot_dir" \
  76. " " \
  77. " -h " \
  78. " display help" \
  79. " "
  80. }
  81. #---
  82. # create_chroot
  83. create_chroot() {
  84. if [ -d "$chroot_dir" ]
  85. then
  86. printf "%s does exist already. \nChoose a different chroot path\n" "$chroot_dir"
  87. exit 1
  88. else
  89. mkdir "$chroot_dir" || exit 1
  90. fi
  91. # create or install from pkg_dir
  92. if [ -d "$pkg_dir" ] && [ "$pkg_count" -ne 0 ]
  93. then
  94. cd "$pkg_dir" || exit 1
  95. find . -type f -name '*.tlz' | while read -r file ; do ROOT="$chroot_dir" pkg add "$file" ; done
  96. else
  97. if ! [ -d "$pkg_dir" ]; then
  98. mkdir "$pkg_dir" || exit 1
  99. fi
  100. cd "$pkg_dir" || exit 1
  101. for i in "$@"
  102. do
  103. echo 'mirror' | lftp "$i"
  104. done
  105. find . -type f -name '*.tlz'| while read -r file; do ROOT="$chroot_dir" pkg add "$file" ; done
  106. fi
  107. # internet access
  108. if [ -d "$chroot_dir"/etc ]; then
  109. cp /etc/resolv.conf "$chroot_dir"/etc
  110. fi
  111. }
  112. #---
  113. # mount_chroot
  114. mount_chroot() {
  115. mount -o bind /proc "$chroot_dir"/proc
  116. # mount --rbind /dev "$chroot_dir"/dev
  117. mount -o bind /dev "$chroot_dir"/dev
  118. mount -o bind /sys "$chroot_dir"/sys
  119. chroot "$chroot_dir"
  120. }
  121. #-----------------------------------
  122. #-----------------------------------
  123. # OPTIONS
  124. #-----------------------------------
  125. # running without argument will do noting, but help
  126. while :;
  127. do
  128. case "$option" in
  129. -c)
  130. create_chroot "$@"
  131. break
  132. ;;
  133. -h)
  134. usage
  135. exit 0
  136. ;;
  137. -m)
  138. mount_chroot
  139. break
  140. ;;
  141. *)
  142. usage
  143. break
  144. ;;
  145. --)
  146. shift
  147. break
  148. ;;
  149. esac
  150. done
  151. exit 0