Yalnızca FAT32 önyükleme bölümüne bırakılan komut dosyalarını içeren bir çözümü tercih edenler için, bunu nasıl yapacağınız aşağıda açıklanmıştır. [ Düzenle: Dosyalar artık bir proje pi-boot-script dosyasında mevcut .]
Diğer cevaplarda belirtildiği gibi, Linux çekirdeğinin başlatıldığı komut satırı argümanlarını içerir. Bu argümanlar /boot/cmdline.txt dizinindedir .
Bunu Raspbian Buster (v10.1) 2019-09-26'da test ettim. Yeni yanıp sönen bir SD kartta veya indirilen .img disk görüntüsünde çalışır, daha sonra istediğiniz sayıda SD karta yanıp sönebilirsiniz.
1. Çekirdek bağımsız değişkenlerini düzenleyin
/Boot/cmdline.txt metin dosyasını açın , herhangi bir init=
parçayı kaldırın ve satırın sonuna ekleyin:
init=/bin/bash -c "mount -t proc proc /proc; mount -t sysfs sys /sys; mount /boot; source /boot/unattended"
Bu satırdaki son sözcük, çekirdek tarafından / sbin / init yerine ilk işlem olarak (PID = 1) çalıştırılacak bir komut dosyasının adıdır . Çekirdek argümanlar yardım sayfası sadece argümanlar olmadan diyor .
komut dosyası çağrı yapamazsınız, init yürütülebilir geçirilen olsun unattended.sh böyle ya şeyler.
2. Komut dosyasını önyükleme bölümüne yerleştirin
Aşağıdakileri önyükleme bölümüne / unattended (komut satırına koyduğunuz ad) olarak kaydedin :
# 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
Bu senaryo gerekli bazı hazırlıkları yapar (bölüm 1), sonra yapmak istediğiniz her şey (2) ve ardından temizleme ve yeniden önyükleme (3). 2 altındaki öğeleri çalıştırmak istediğiniz komutlarla değiştirin.
Bazı yapılandırma görevleri için, ağ ve diğer hizmetleri getirmek için normal bir önyüklemeye ihtiyacınız vardır, bu nedenle bu sürümdeki örnek (aşağıda açıklanmıştır) yalnızca Pi yeniden başlatıldığında çalışacak uygun bir komut dosyasına hazırlanır.
3. Komut dosyanızın gerektirdiği diğer dosyaları önyükleme bölümüne yerleştirin
... belli ki.
Misal
Komut dosyamla birlikte , Linux bölümüne taşımak istediğim dosyaları içeren bir önyükleme bölümüne bir klasör yükü / koydum . Yukarıda katılımsız komut dosyasında ,
- A satırı, dosyaları pi-kullanıcının dizinine taşır. Örneğin , loadload / home / pi / .bashrc /home/pi/.bashrc olarak kök dosya sistemine taşınır ;
- dahil Linux bölümünün, içine hattı B hamle kök sahip olduğu dosyaları yük / usr / local / bin / one-time-script.sh hale geldiği /usr/local/bin/one-time-script.sh ve benzer yük / lib / systemd / system / bir kerelik-script.service ;
- C satırı daha sonra bu son dosyaya bir sembolik bağlantı oluşturur, bu nedenle yapılandırma betiğim one-time-script.sh bir sonraki önyüklemede çalıştırılır.
Bu komut dosyası benim gibi çeşitli özelleştirmeler yapar: başka bir FAT32 bölümü oluşturur ve biçimlendirir ve pi kullanıcı (uygulama günlükleri vb. İçin) yazabilir böylece / etc / fstab ekler ; ext4 bölümünü ve dosya sistemini SD kartın geri kalanına yeniden boyutlandırır; yerel ayarı, saat dilimini, ana bilgisayar adını (CPU seri numarasına göre), WiFi ülkesini değiştirir; WiFi ağını ve parolasını ayarlar; SSH'yi açar; SSH oturumları için bir dil ayarları sorununu giderir; otomatik oturum açmadan bir konsolda önyüklemeyi yapılandırır; sistemle ilgili bazı verileri önyükleme bölümündeki bir dosyaya yazar; ve elbette bu symlink'i kaldırır, böylece önyükleme sırasında tekrar çalışmaz.
Çoğu kullanıcı bunu gereksiz bulur ve harika çözümler olan PiBakery , pi-init2 veya özel bir ext4 görüntüsü kullanmayı tercih eder . Bunu tercih ederim çünkü tam olarak anlayabiliyorum ve başka bir yazılım çalıştırmak zorunda değilim. Ve ayrıca çalışır: komut dosyalarımı koyduğum .img dosyasıyla, tüm SD kartı yanıp sönüyor + Pi + 'ya koyarak kendisini yapılandırması için 6 dakika sürüyor.
Kaynak Komut dosyası fikrini init=
çekirdek argümanı olarak ve mount
çalışmasını sağlamak için gerekli komutları Linux bölümünü yeniden boyutlandırmak için varsayılan olarak çalışan init_resize.sh komut dosyasında buldum .