FAT32 부팅 파티션에 스크립트 만 포함 된 솔루션을 선호하는 사람들을위한 방법은 다음과 같습니다. [ 편집 : 이제 파일을 pi-boot-script 프로젝트에서 사용할 수 있습니다 .]
다른 답변에서 언급했듯이 Linux 커널이 시작되는 명령 줄 인수가 포함됩니다. 이러한 인수는 /boot/cmdline.txt에 있습니다.
나는 이것을 Raspbian Buster (v10.1) 2019-09-26에서 테스트했습니다. 새로 플래시 된 SD 카드 또는 다운로드 한 .img 디스크 이미지에서 작동하며, SD 카드 를 원하는 수만큼 플래시 할 수 있습니다.
1. 커널 인수를 편집하십시오
텍스트 파일 /boot/cmdline.txt를 열고 init=
부분을 제거한 후 줄 끝에 추가하십시오.
init=/bin/bash -c "mount -t proc proc /proc; mount -t sysfs sys /sys; mount /boot; source /boot/unattended"
이 줄의 마지막 단어는 커널이 / sbin / init 대신 첫 번째 프로세스 (PID = 1)로 실행할 스크립트 이름입니다 . 커널 인수 도움말 페이지는 단지 인수없이 말한다 .
스크립트가 호출 할 수 있도록 초기화 실행에 전달받을 unattended.sh 같은 또는 일.
2. 부팅 파티션에 스크립트를 넣습니다
다음을 부트 파티션에 / unattended (명령 줄에 입력 한 이름) 로 저장하십시오 .
# 1. MAKING THE SYSTEM WORK. DO NOT REMOVE
mount -t tmpfs tmp /run
mkdir -p /run/systemd
mount / -o remount,rw
sed -i 's| init=.*||' /boot/cmdline.txt
# 2. THE USEFUL PART OF THE SCRIPT
# Example:
[[ -d /boot/payload/home/pi ]] && sudo -u pi cp --preserve=timestamps -r\
/boot/payload/home/pi /home/ && rm -rf /boot/payload/home/pi # A
[[ -d /boot/payload ]] && cp --preserve=timestamps -r /boot/payload/* /\
&& rm -rf /boot/payload # B
ln -s /lib/systemd/system/one-time-script.service\
/etc/systemd/system/multi-user.target.wants/ # C
# 3. CLEANING UP AND REBOOTING
sync
umount /boot
mount / -o remount,ro
sync
echo 1 > /proc/sys/kernel/sysrq
echo b > /proc/sysrq-trigger
sleep 5
이 스크립트는 필요한 준비 (1 장), 수행하려는 작업 (2), 정리 및 재부팅 (3)을 수행합니다. 2 아래의 항목을 실행하려는 명령으로 바꾸십시오.
일부 구성 작업의 경우 네트워킹 및 기타 서비스를 제공하기 위해 일반 부팅이 필요할 수 있으므로이 버전의 예제 (아래 설명)는 Pi가 재부팅 될 때 적절한 스크립트를 실행할 준비 만합니다.
3. 스크립트에 필요한 다른 파일을 부팅 파티션에 넣습니다.
...명백하게.
예
스크립트와 함께 부트 파티션에 폴더 payload / 를 넣었습니다 .이 파티션에는 Linux 파티션으로 이동하려는 파일이 들어 있습니다. 위의 무인 스크립트 에서
- A 행은 파일을 pi 사용자의 디렉토리로 이동시킵니다. 예를 들어 payload / home / pi / .bashrc 는 /home/pi/.bashrc 와 같이 루트 파일 시스템으로 이동합니다 .
- 를 포함하여 리눅스 파티션에 선 B의 이동 루트 소유의 파일을 페이로드 / usr / 지방 / 빈 / one-time-script.sh 가되는 /usr/local/bin/one-time-script.sh 및 유사 페이로드 / lib / systemd / system / one-time-script.service ;
- C 행은 마지막 파일에 대한 심볼릭 링크를 생성하므로 다음 부팅시 구성 스크립트 one-time-script.sh 가 실행됩니다.
이 스크립트는 내가 좋아하는 다양한 사용자 정의를 수행합니다. 다른 FAT32 파티션을 작성하고 포맷하고 / etc / fstab에 추가 하여 pi 사용자가 응용 프로그램 로그 등을 쓸 수 있도록합니다. ext4 파티션 및 파일 시스템의 크기를 SD 카드의 나머지 크기로 조정합니다. 로케일, 시간대, 호스트 이름 (CPU 일련 번호 기반), WiFi 국가를 변경합니다. WiFi 네트워크 및 암호를 설정합니다. SSH를 켭니다. SSH 세션의 언어 설정 문제를 해결합니다. 자동 로그인없이 콘솔로 부팅하도록 구성합니다. 시스템에 대한 일부 데이터를 부팅 파티션의 파일에 씁니다. 물론 해당 심볼릭 링크를 제거하여 부팅시 다시 실행되지 않습니다.
대부분의 사용자는이를 불필요하게 생각하고 PiBakery , pi-init2 또는 사용자 지정 ext4 이미지 를 사용하는 것을 선호합니다 . 이는 훌륭한 솔루션입니다. 나는 그것을 완전히 이해할 수 있고 다른 소프트웨어를 실행할 필요가 없기 때문에 이것을 선호합니다. 그리고 그것은 또한 작동합니다 : 스크립트를 넣은 .img 파일을 사용하면 SD 카드를 모두 플래시하고 Pi에 넣는 + + 자체 구성을 실행하는 데 6 분이 걸립니다.
소스 리눅스 파티션의 크기를 조정하기 위해 기본적으로 실행되는 init_resize.sh 스크립트 에서 스크립트에 대한 아이디어와 init=
커널 인수로 mount
작동하는 데 필요한 명령을 발견했습니다 .