enter-chroot 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #!/bin/bash
  2. if [ -z $ROOTFS ];then
  3. ROOTFS="/home/mlfs/onsistem"
  4. fi
  5. if [ ! -z $1 ];then
  6. ROOTFS="$1"
  7. fi
  8. if [ ! -d $ROOTFS ];then
  9. echo "$ROOTFS dizini mevcut değil!"
  10. exit 1
  11. fi
  12. # Herhangi bir hatada çıkış için
  13. set -e
  14. LC_ALL=C
  15. export LC_ALL
  16. unmount_ortam()
  17. {
  18. for node in "${ROOTFS}/sys" \
  19. "${ROOTFS}/proc" \
  20. "${ROOTFS}/dev/pts" \
  21. "${ROOTFS}/dev" \
  22. "${ROOTFS}/run" ; \
  23. do
  24. if mount | grep -q "$node"
  25. then
  26. echo "Çözülüyor ${node} ..."
  27. if ! umount "$node"
  28. then
  29. echo "Sorunlu $node çözülüyor ..."
  30. umount -l "$node"
  31. fi
  32. fi
  33. done
  34. }
  35. # chroot girerken eski bağlar temizlenir.
  36. unmount_ortam
  37. # chroot için gerekli dizinlerin oluşturulması
  38. # Create required directory for destination
  39. mkdir -p -- "${ROOTFS}/dev" \
  40. "${ROOTFS}/dev/pts" \
  41. "${ROOTFS}/proc" \
  42. "${ROOTFS}/sys" \
  43. "${ROOTFS}/run"
  44. if [ -h $ROOTFS/dev/shm ]; then
  45. mkdir -pv $ROOTFS/$(readlink $ROOTFS/dev/shm)
  46. fi
  47. rm -f ${ROOTFS}/dev/console
  48. rm -f ${ROOTFS}/dev/null
  49. mknod -m 600 ${ROOTFS}/dev/console c 5 1
  50. mknod -m 666 ${ROOTFS}/dev/null c 1 3
  51. echo "Chroot ortamı bağlanıyor..."
  52. mount -v --bind /dev $ROOTFS/dev
  53. mount -vt devpts devpts $ROOTFS/dev/pts -o gid=5,mode=620
  54. mount -vt proc proc $ROOTFS/proc
  55. mount -vt sysfs sysfs $ROOTFS/sys
  56. mount -vt tmpfs tmpfs $ROOTFS/run
  57. # Çıkışları yakalamak için bash tuzak(trap) eklenir.
  58. trap 'echo ; unmount_ortam' EXIT HUP QUIT ABRT TERM
  59. chroot "$ROOTFS" /usr/bin/env -i \
  60. HOME=/root \
  61. TERM="$TERM" \
  62. PS1='(temel) \u:\w\$ ' \
  63. PATH=/bin:/usr/bin:/sbin:/usr/sbin \
  64. USER=root \
  65. /usr/bin/bash --login +h