내 문제는 간단하지만 온라인에서 해결책을 찾을 수 없습니다. init.d 스크립트가 포함된 파일 시스템이 있습니다. 시스템이 처음 부팅될 때 이 스크립트가 실행되기를 원합니다. 어떻게 해야 하나요? 가능하다면 init.d 심볼릭 링크를 수동으로 생성하는 것을 피하고 싶습니다.
편집: 저는 데비안 4.19를 사용하고 있습니다. init.d 스크립트를 포함하는 파일 시스템은 최종 시스템의 rootfs입니다. 첫 번째 부팅이란 컴퓨터가 켜져 있는 파일 시스템으로 처음 부팅할 때 스크립트가 실행되기를 원한다는 의미입니다(내가 사용하는 커널도 처음으로 부팅되지만 그게 중요하지 않다고 생각합니다). 이 init.d 스크립트를 유지하고 가능하면 다른 서비스 관리로 이동하지 않고 싶습니다. 기본적으로 문제는 간단합니다. 부팅하려는 Linux 파일 시스템에 액세스할 수 있고 전체 시스템을 부팅하지 않고 init.d 스크립트를 활성화하고 싶습니다.
답변1
첫째, "Debian 4.19"는 존재하지 않습니다. 아마도 다음과 같은 데비안 시스템을 보고 있을 것입니다.리눅스 커널 버전 4.19이는 다음을 의미합니다.데비안 10("buster", 약 2주 전 Debian 11이 출시되면서 "oldstable"이 된 버전).
데비안은 데비안 8부터 사용해 왔지만 systemd
여전히 일부 SysVinit 호환성과 다른 초기화 시스템을 교체할 수 있는 옵션을 유지하고 있습니다 systemd
. 비록 데비안 10에서 SysVinit을 사용하는 것이 실제로 얼마나 실용적인지는 모르겠지만, 이제 시스템 통합의 이점 은 systemd
.systemd
예를 들어 Debian 10 설치 루트 파티션이 포함된 디스크가 있고 /dev/sdXN
시스템이 실제로 부팅되기 전에 init.d 스크립트를 추가하도록 수정하려고 합니다.
디스크를 다른 시스템에 마운트할 수 있습니다.
mount /dev/sdXN /mnt
그런 다음 새로 설치된 디렉터리에 스크립트를 복사합니다 /etc/init.d/
.
cp /some/where/myscript /mnt/etc/init.d/
chmod a+rx /mnt/etc/init.d/myscript
참고: systemd
호환성을 위해 스크립트는 시작 부분에 LSB 스타일 주석 블록을 포함하여 종속성을 문서화하고 systemd
시작 중에 조기에 실행되는 것을 방지해야 합니다.이 데비안 위키 기사를 참조하세요또는insserv(8)
매뉴얼 페이지자세한 내용은.
기본적으로 스크립트 시작 부분에 다음과 같은 주석 블록이 있어야 합니다.주석이 아닌 다른 줄 앞에:
### BEGIN INIT INFO
# Provides: myscript
# Required-Start: $local_fs $syslog $network
# Required-Stop: $local_fs $syslog $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start myscript at boot time
# Description: Enable service provided by myscript.
### END INIT INFO
Required-Start
스크립트 요구 사항에 따라 및 행을 조정해야 합니다 .Required-Stop
스크립트가 준비되면 chroot
새 설치로 이동하여 실행할 수 있습니다.update-rc.d
init.d 심볼릭 링크를 생성하는 도구입니다. 그러나 실제 chroot 명령을 실행하기 전에 파일 시스템을 마운트해야 합니다. /proc
그렇지 /sys
않으면 /dev
많은 작업을 수행할 수 없습니다.
mount -t proc none /mnt/proc
mount -t sysfs none /mnt/sys
mount -o rbind /dev /mnt/dev
chroot /mnt /bin/bash # From this point on, /mnt will be this session's root directory
이제 세션이 새로 설치된 환경 "내에서" 실행되며 마치 시스템이 이미 새 설치를 실행 중인 것처럼 해당 설치 도구의 대부분을 사용할 수 있습니다. 따라서 다음 update-rc.d
명령을 사용할 수 있습니다.
/usr/sbin/update-rc.d myscript defaults
그런 다음 chroot를 실행 취소하고 새로 마운트된 루트 파일 시스템을 마운트 해제하여 프로세스를 깔끔하게 종료할 수 있습니다.
exit # back to having the real root directory
umount /mnt/dev
umount /mnt/proc
umount /mnt/sys
umount /mnt
(비활성 설치의 루트 파일 시스템을 마운트하는 절차는 손상된 부트 로더 복구 또는 잊어버린 루트 암호 변경과 같은 많은 유지 관리 및 문제 해결 상황에 적용됩니다. 이 특정 경우에는 루트 파일 시스템을 마운트할 필요가 없을 수도 있습니다. 비활성 설치. 마운트 /proc
및 설치 /sys
...그러나 다른 상황에도 더 쉽게 적용할 수 있도록 chroot 프로세스를 "일반" 형식으로 표시하기로 선택했습니다.