02.1-enter-chroot 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #!/bin/bash
  2. # temel sistemin bash i yapılmadan önce kullanılacak.
  3. hata_olustu(){
  4. echo $1
  5. exit 1
  6. }
  7. [ -z $ONSISTEM_CHROOT ] && hata_olustu "ONSISTEM_CHROOT tanmlı değil!"
  8. [ ! -d $ONSISTEM_CHROOT/tools ] && hata_olustu "$ONSISTEM_CHROOT/tools dizini mevcut değil!"
  9. # Herhangi bir hatada çıkış için
  10. set -e
  11. LC_ALL=C
  12. export LC_ALL
  13. unmount_ortam()
  14. {
  15. for node in "${ONSISTEM_CHROOT}/sources" \
  16. "${ONSISTEM_CHROOT}/sys" \
  17. "${ONSISTEM_CHROOT}/proc" \
  18. "${ONSISTEM_CHROOT}/dev/pts" \
  19. "${ONSISTEM_CHROOT}/dev" \
  20. "${ONSISTEM_CHROOT}/run" ; \
  21. do
  22. if mount | grep -q "$node"
  23. then
  24. echo "Çözülüyor ${node} ..."
  25. if ! umount "$node"
  26. then
  27. echo "Sorunlu $node çözülüyor ..."
  28. umount -l "$node"
  29. fi
  30. fi
  31. done
  32. }
  33. # chroot girerken eski bağlar temizlenir.
  34. unmount_ortam
  35. # chroot için gerekli dizinlerin oluşturulması
  36. # Create required directory for destination
  37. mkdir -p -- "${ONSISTEM_CHROOT}/dev" \
  38. "${ONSISTEM_CHROOT}/dev/pts" \
  39. "${ONSISTEM_CHROOT}/proc" \
  40. "${ONSISTEM_CHROOT}/sys" \
  41. "${ONSISTEM_CHROOT}/run" \
  42. "${ONSISTEM_CHROOT}/sources"
  43. if [ -h $ONSISTEM_CHROOT/dev/shm ]; then
  44. mkdir -pv $ONSISTEM_CHROOT/$(readlink $ONSISTEM_CHROOT/dev/shm)
  45. fi
  46. rm -f ${ONSISTEM_CHROOT}/dev/console
  47. rm -f ${ONSISTEM_CHROOT}/dev/null
  48. mknod -m 600 ${ONSISTEM_CHROOT}/dev/console c 5 1
  49. mknod -m 666 ${ONSISTEM_CHROOT}/dev/null c 1 3
  50. echo "Chroot ortamı bağlanıyor..."
  51. mount -v --bind /dev $ONSISTEM_CHROOT/dev
  52. mount -vt devpts devpts $ONSISTEM_CHROOT/dev/pts -o gid=5,mode=620
  53. mount -vt proc proc $ONSISTEM_CHROOT/proc
  54. mount -vt sysfs sysfs $ONSISTEM_CHROOT/sys
  55. mount -vt tmpfs tmpfs $ONSISTEM_CHROOT/run
  56. mount -o bind "/sources" "$ONSISTEM_CHROOT/sources"
  57. _MPS_PATH="/tools/share/mps"
  58. # mps nin tools içine kopyalanması
  59. if [ ! -d $ONSISTEM_CHROOT/${_MPS_PATH} ];then
  60. mkdir -p $ONSISTEM_CHROOT/${_MPS_PATH}
  61. cp -rf $MPS_PATH/* $ONSISTEM_CHROOT/${_MPS_PATH}/
  62. fi
  63. # temel dosya sistemi için betik ataması
  64. if [ -d $ONSISTEM_CHROOT/tools/bin ];then
  65. cp -f $PWD/03-* $ONSISTEM_CHROOT/tools/bin/
  66. cp -f $PWD/04-* $ONSISTEM_CHROOT/tools/bin/
  67. cp -f $PWD/05-* $ONSISTEM_CHROOT/tools/bin/
  68. fi
  69. _TALIMATNAME="/tools/share/talimatname"
  70. # temel sistem talimatlarının yüklenmesi
  71. if [ ! -d $ONSISTEM_CHROOT/${_TALIMATNAME}/0 ];then
  72. mkdir -p $ONSISTEM_CHROOT/${_TALIMATNAME}
  73. if [ -d ./talimatname/0 ];then
  74. cp -rf ./talimatname/0 $ONSISTEM_CHROOT/${_TALIMATNAME}/
  75. echo "temel sistem talimatları kopyalandı."
  76. else
  77. echo "$TALIMATNAME/0 bulunamadı"
  78. fi
  79. fi
  80. # önsisteme wget kurulduysa sertifika ve resolv.conf ayarlarının kopyalanması
  81. [ -d $ONSISTEM_CHROOT/tools/etc/ssl/certs/ ] && \
  82. [ -f /etc/ssl/certs/ca-certificates.crt ] && \
  83. cp -fv /etc/ssl/certs/ca-certificates.crt $ONSISTEM_CHROOT/tools/etc/ssl/certs/
  84. cp -fv /etc/resolv.conf $ONSISTEM_CHROOT/tools/etc/
  85. # Çıkışları yakalamak için bash tuzak(trap) eklenir.
  86. trap 'echo ; unmount_ortam' EXIT HUP QUIT ABRT TERM
  87. chroot "$ONSISTEM_CHROOT" /usr/bin/env -i \
  88. HOME=/root \
  89. TERM="$TERM" \
  90. PS1='(temel) \u:\w\$ ' \
  91. MPS_PATH=${_MPS_PATH} \
  92. TALIMATNAME="/usr/milis/talimatname" \
  93. PATH=${_MPS_PATH}/bin:/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin:/tools/sbin \
  94. USER=root \
  95. /usr/bin/bash --login +h