
chrooted 시스템으로 부팅하도록 Grub 메뉴 항목을 설정하고 싶습니다(기존 시스템을 너무 많이 건드리지 않도록 chrooted debootstrap 설치).
현재 나는 그것을 달성하기 위해 다음을 수행합니다.
chrooted 환경에 linux-image와 친구들을 설치하세요
일반적인 동작 대신 initramfs를 수동으로 리마스터하여 시스템에 chroot합니다.
rootmnt=$rootmnt/root/squeeze
...
#exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console
exec chroot ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console
3.. /boot/grub.cfg에 항목을 추가합니다:
menuentry 'Chrooted debian Squeeze' {
...
linux /root/squeeze/boot/vmlinuz root=... rw
initrd /root/squeeze/boot/initrd-chroot
}
작동하지만 설정이 쉽지 않으며 initrd를 변경해야 할 때마다 수동 해킹이 필요합니다. 어떻게 하면 더 잘할 수 있나요?
답변1
나는 같은 문제를 겪었고 결국이것을 쓰고다양한 시스템(현재 데비안, 우분투)에서 원활하게 작동하도록 하려면 다음을 수행하세요.
make_chroot_initrd
기존 이미지에서 chroot가 활성화된 새로운 initrd 이미지를 생성하려면 스크립트를 실행하세요 .
# ./make_chroot_initrd /chroot/trusty/boot/initrd.img-3.13.0-32-generic
making new initrd: /chroot/trusty/boot/initrd.img-3.13.0-32-generic.chroot
새 이미지는 부팅 매개변수를 처리할 수 있다는 점을 제외하면 완전히 동일합니다 chroot=
.
grub2를 부트로더로 사용하면 다음 항목을 추가할 수 있습니다 /boot/grub/grub.cfg
./etc/grub.d/40_custom
menuentry "ubuntu trusty, (linux 3.13.0-32) (chroot)" {
insmod ext2 # or whatever you're using ...
set root='(hd0,7)' # partition containing the chroot
set chroot='/chroot/trusty' # chroot path
linux $chroot/boot/vmlinuz-3.13.0-32-generic root=/dev/sda7 chroot=$chroot rw
initrd $chroot/boot/initrd.img-3.13.0-32-generic.chroot
}
(파일/파티션을 자신의 것과 일치하도록 변경)
시스템 전체 설치
만족스러우면 변경 사항을 영구적으로 적용할 수 있습니다
(initramfs-tools 패키지가 업그레이드될 때까지).
루트가 지정된 시스템에서:
# cd /usr/share/initramfs-tools
# cp -pdrv . ../initramfs-tools.orig # backup
# patch -p1 < path_to/boot_chroot/initrd.patch
# rm *.orig */*.orig
# update-initramfs -u
이제부터 일반 initrd 이미지는 chroot 부팅을 지원합니다.
그러면 동기화되지 않을 수 있는 별도의 initrd.chroot를 사용할 필요가 없습니다.
보다boot_chroot자세한 내용은.
답변2
run-init에서 chroot로 전환한 이유는 무엇입니까? 그렇게 해서는 안 됩니다. run-init는 initramfs 루트의 모든 항목을 삭제한 다음 $rootmnt로 루트를 변경합니다. 당신은 그 행동을 유지하고 싶습니다.
매번 initramfs를 수동으로 다시 빌드하지 않아도 되는 방법은 /usr/share/initramfs-tools에서 init 스크립트의 마스터 복사본을 편집하세요. 최소한 initramfs-tools 패키지를 업그레이드할 때까지는 작동합니다.
영구적인 해결책은 init 스크립트를 패치하여 rootmnt에 무언가를 추가하는 부팅 인수를 인식하고 해당 패치를 데비안에 포함하도록 제출하는 것입니다. 그런 다음 해당 방식으로 부팅해야 하는 항목에 대해 grub에 인수를 추가할 수 있습니다.