Meluncurkan Raspberry Pi dengan dukungan grafis penuh pada microSD, selamanya tetap dalam mode baca-saja setelah menginstal sistem. Tidak adanya rekaman data ke memori flash meningkatkan keandalan perangkat, membawanya lebih dekat ke kelas produk industri. Petunjuk langkah demi langkah. Sebuah teater kecil rekayasa absurditas untuk menghibur penonton.
Saya membutuhkan perangkat jaringan sumber terbuka dengan output HDMI, dan saya memutuskan untuk mencoba Raspberry Prog. Ya, itulah tepatnya yang saya sarankan terjemahkan Pi : Prog . Tentu saja, bahkan seorang pembayar tunggal membutuhkan OS. Jadi, saya pergi ke situs web resmi , berharap menemukan ada panduan rinci tentang cara membuat kotak turnkey à la yang keras dan tidak bisa dihancurkan . Tetapi orang-orang, seolah-olah tidak ada yang terjadi, menginstal Ubuntu (yaitu Jessie Jessie) langsung pada microSD, menempatkan swap di sana juga. Seperti desktop biasa, hadapi telapak tangan.. — , . , fsck. , , .
, -, , - . , , . — .
, , .
,- RPi, (!) . , Raspbian - 720 . , 12 , , «» USB- 4 . ,
RPi,
ECIO28P,
.
, : - , . -
, - ( PS/2 ). , , über- , . : . , , . - , .
DPMS, GUI-,
LightDM, X-
DPMS /etc/lightdm/lightdm.conf
:
...
xserver-command=X -s 0 -dpms -nocursor
...
-nocursor
.
~/.config/lxsession/LXDE/autostart
. ,
cron(8)
718
xscreensaver-command -deactivate
( , ;-)
: LightDM ,
~/.config/lxsession/LXDE/autostart
feh '@' . . .. ,
lxpanel
,
pcmanfm
,
xscreensaver
, DPMS .
apt-get
autostart
, , X-, , . , .
UPD
Jaromir unclutter , . , .
Spider55 LightDM noDM. , .
Pelat tunggal berbentuk bulat dalam ruang hampa - membosankan. Tidak untuk itu pada Raspberry Prog seluruh sisir GPIO dengan I2C / PWM, serta semua jenis CSI-DSI dan pengawas. Tapi sebagai contoh praktis, saya masih menggunakan demonstran jaringan dengan output HDMI, menambahkan kemampuan bagi beberapa pengguna untuk "menangkap" panel layar umum dan menyiarkan desktop mereka ke atasnya tanpa bangkit dari kursi. Layar diputar menghadap para tamu, diam-diam diam-diam memilah-milah gambar yang diposting di jaringan. Jika Anda perlu menunjukkan produk kepada tamu, salah satu administrator yang duduk di konter mengubah sementara papan skor menjadi "cermin" miliknya. , . -, . ,
Sauron .
,
, (.. ) . : Raspberry Pi microSD read-only,
- .
Bahkan sistem file log yang sangat serius pada akhirnya tidak dapat mengontrol proses yang terjadi di dalam media SD ketika daya dimatikan. Sebagai contoh, SSD serius untuk digunakan di pusat data memiliki kapasitor, yang debitnya hanya cukup untuk menutup transaksi penulisan terakhir, dan bahkan lebih sedikit lagi. Bagaimana dengan mematikan di microSD? Saya yakin tidak ada cukup kapasitor di sana, tetapi ada kemungkinan tidak nol bahwa perekaman halaman memori NAND tidak akan selesai. Dan kemudian driver sistem file dari baca akan datang ke kebingungan sehingga intervensi manual dari operator akan diperlukan. Di sini Anda memiliki bingkai foto dengan fsck.microSD Raspberry Pi read-only , .. ? , (
).
, . , . ,
, . , .
:untuk melakukan bahkan fungsi baru yang paling dasar, sistem Linux akan selalu menarik banyak dependensi yang tidak perlu, dan bahkan dengan grafik "ringan" pertumbuhan entropi sistem berlipat ganda.Teorema: dalam setiap paket perangkat lunak hingga selalu ada sepotong kode yang sangat kecil yang akan mencoba untuk menulis satu bit tak berguna yang tak terhingga ke sistem file read-only, yang akan menyebabkan kesalahan fatal, merusak seluruh sistem dan mencoret banyak usaha operator.Solusi: UnionFS
Seorang Jerman beberapa tahun yang lalu datang dengan cara yang sangat indah untuk mengumpulkan semua jarum ini dalam bak menggunakan Unionfs dan hanya membakar mereka di tungku di setiap reboot. Sayangnya, postingan asli sudah mati bersama dengan domain yang meng-host-nya, tetapi orang Jerman itu jelas tidak sendirian. Para pembaca yang bersyukur telah mempertahankan gagasan itu, saya menganggapnya perlu untuk mempublikasikannya di sini.Intinya adalah bahwa di atas "dukungan" permanen (sistem file read-only pada microSD), setiap kali Anda menyalakannya, "tempelan" sementara dibuat dalam RAM, yang menyerap semua entropi yang tidak perlu dan "terbakar" ketika daya perangkat dimatikan. Sistem file pada microSD tetap hanya-baca sepanjang waktu, dan oleh karena itu risiko kerusakan berkurang hingga hampir nol, seperti risiko memakai flash drive prematur.Mengapa tidak ketat ke nol? Penikmat EXT4, koreksi saya, tetapi driver sistem file masih menulis sesuatu ke media setiap kali sistem file di-mount-unmount, bahkan jika itu dipasang di read-only. Dan itu noatime
tidak membantu, Anda memerlukan kunci perangkat keras pada microSD. Kalau tidak, bagaimana saya bisa menjelaskan fakta bahwa /sys/block/mmcblk0/stat
saya telah membaca 282612 sektor, dan sudah mencatat 96, dan ini dalam mode read-only? Yah, meskipun rasionya hampir 3000: 1, pada sistem reguler itu adalah 5: 1. (Bersalah, berbohong, tetapi itu tidak mengubah esensi)UPD:
gattopazzo83 Flash Media Kit - ( ). 100,000 , SLC- microSD. read-only, , («» - «» ;-)
UPD:
doga, «» SD- RPi. doga mmc-utils, SD-, Raspbian . - , , , .
SD-:
udevadm info -a -n /dev/mmcblk0
«»
CID
CSD
, (
name
), (
serial
), (
date
), (
hwrev, fwrev, oemid, manfid
).
www.sdcard.org «» (Simplified Specifications), . Part 1 Simplified, Physical Layer Simplified Specification.
stat
,
kernel.org. , .
- ,
lsmmc.c.
« »
RPi SD cards Embedded Linux, .
— — , mmc-utils , .
Apa kerugiannya selain “pembakaran” log? Perangkat tanpa jam perangkat keras saat startup selalu percaya bahwa perangkat tersebut ada di halaman pada 1 Januari 1970, dan berada dalam kesalahpahaman ini hingga meningkatkan tumpukan jaringan dan ketersediaan NTP. Oleh karena itu, pada saat publikasi ini, seluruh rangkaian objek file "tambalan" akan sekitar 46 tahun lebih muda dari yang mereka kira. Di sisi lain, beberapa detik dari awal era tidak lagi nol.UPD: jam real-time
Pengguna st1373 dalam komentar mengingat ketersediaan jam real-time yang kompatibel dengan I2C DS3231 (biaya sekitar satu setengah gulungan kertas toilet). Ada instruksi sederhana dalam bahasa Rusia: Menghubungkan RTC (real-time clock) ke Raspberry Pi .
Keamanan
Agak merepotkan untuk meluncurkan pembaruan keamanan ke sistem seperti itu. Tapi, sekali lagi, meretas Hal seperti itu agak lebih rumit daripada mengeksploitasi kerentanan Adobe Flash di peramban desktop biasa. Kode berbahaya harus membuka sistem file untuk menulis untuk mendapatkan pijakan di dalamnya, jika tidak maka akan "terbakar" setelah reboot bersama dengan log dan sampah. SquashFS yang disebutkan di bawah semakin mempersulit perubahan. Namun, semua keuntungan ini benar hingga saat ketika sebagian besar kode yang akan ditulis "ditutup" di zona baca-saja, yaitu ketika "substrat" yang dilindungi tidak melakukan panggilan ke perintah yang terletak di area yang direkam: inilah tepatnya (apakah itu?) vektor infeksi prioritas di Internet of Things. Hati-hati dengan skrip startup, mereka dijalankan sebagai root,satu langkah yang salah - dan ini adalah kerentanan kritis dari infrastruktur perapian, yang selalu terhubung ke Internet.Rasbian Jessie microSD read-only, . .
DISCLAIMER
. root
, sudo
. , , sudo
, -. , * * , ? -, 0.33, , … : , root
sudo bash
, .
1.
Instal Raspbian Jessie Lite. Gunakan utilitas untuk raspi-config
mengatur pengaturan regional dan kata sandi pengguna pi
. Hubungkan jaringan, Debian adalah anak dari broadband. Jangan memasukkan pemuatan dalam grafik.apt-key update
apt-get update
2. Tambah atau hapus program
Dengan grafis, instalasi:apt-get install --no-install-recommends tightvncserver xtightvncviewer xserver-xorg xinit lxde-core lxappearance lightdm feh xprintidle policykit-1 busybox-syslogd ntpdate watchdog unionfs-fuse
Penghapusan:dpkg --purge rsyslog
apt-get remove --purge wolfram-engine triggerhappy cron anacron logrotate dphys-swapfile fake-hwclock
apt-get autoremove --purge
tightvncserver, xtightvncviewer, xprintidle feh
Saya membutuhkan paket untuk tugas tertentu, Anda dapat melakukannya tanpa mereka.Jika tidak ada grafis, Anda * tidak * perlu: xserver-xorg xinit lxde-core lxappearance lightdm policykit-1
.3. Menciptakan lingkungan grafis
Sekarang utilitas raspi-config
dapat mengaktifkan autorun dalam mode grafis dengan masuk otomatis, yang akan menjadi hak pengguna pi
. Daripada fokus sudo
, lebih baik memasukkan kata sandi yang kuat untuk pengguna pi
, dan tidak menggunakannya pi
untuk secara otomatis masuk ke antarmuka grafis. Sebaliknya, buat pengguna pu
dan jalankan "X" dengan haknya. Selain itu, shell (shell default) dari pengguna ini lebih baik menonaktifkan (dengan menyetel /usr/sbin/nologin
), atau menggantinya dengan skrip jenis khusus /usr/local/bin/pu
. Saya bermaksud membicarakan hal ini dalam publikasi lain yang dikhususkan untuk panel video dengan remote control via SSH, yang untuknya dibuat akun terpisah dengan hak yang lebih rendah. Sekali lagi terima kasih kepada Sauron et al .adduser --home /home/pu --shell /usr/local/bin/pu --uid 990 --gecos "RPi p-u" --gid 1000 pu
mkdir -p /home/pu/.config/lxsession/LXDE
cp -p /etc/xdg/lxsession/LXDE/desktop.conf /home/pu/.config/lxsession/LXDE/desktop.conf
touch /home/pu/.config/lxsession/LXDE/autostart
chown -R pu:pi /home/pu
sed -i 's/^#\?xserver-command=.*$/xserver-command=X -s 0 -dpms -nocursor/' /etc/lightdm/lightdm.conf
sed -i 's/^#\?autologin-user=.*$/autologin-user=pu/' /etc/lightdm/lightdm.conf
/etc/lightdm/lightdm.conf
, , :
...
xserver-command=X -s 0 -dpms -nocursor
...
autologin-user=pu
...
4. ( )
Raspberry Pi 3 Model B, :
modprobe bcm2835_wdt
echo "bcm2835_wdt " | sudo tee -a /etc/modules
[Install]
/lib/systemd/system/watchdog.service
:
[Install]
WantedBy=multi-user.target
:
systemctl enable watchdog.service
, . , , , , , .. .
watchdog(8)
watchdog.conf(5)
5.
Saya mematikan tampilan logo raspberry dan menukar file, menyalakan pemuatan cepat. Untuk melakukan ini, saya menambahkan /boot/cmdline.txt
hanya dalam tiga kata logo.nologo fastboot noswap
. Saya berakhir dengan ini:logo.nologo dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait fastboot noswap
6. Menyegel sistem file root Raspberry Pi hanya-baca
Sekarang kami akhirnya sampai pada hal utama.Di bawah ini adalah skrip yang harus ditempatkan dengan nama mount_unionfs
di suatu tempat di /usr/local/bin
. Ingatlah untuk mengaktifkan bit kelayakan + x ( chmod
755 atau 555). Perhatikan akhiran .orig
dan .rw
, mereka harus bertepatan dengan persiapan (lebih lanjut):#!/bin/sh
DIR=$1
ROOT_MOUNT=$(awk '$2=="/" {print substr($4,1,2)}' < /etc/fstab)
if [ $ROOT_MOUNT = "rw" ]; then
/bin/mount --bind ${DIR}.orig ${DIR}
else
/bin/mount -t tmpfs ramdisk ${DIR}.rw
/usr/bin/unionfs-fuse -o cow,allow_other,suid,dev,nonempty ${DIR}.rw=RW:${DIR}.orig=RO ${DIR}
fi
Dari instruksi lain, saya memutuskan untuk mengambil saran dan melakukan hal berikut:insserv -r bootlogs
insserv -r alsa-utils
rm -rf /var/lib/dhcp/
ln -s /tmp /var/lib/dhcp
/home
- ,
/etc
/var
/home
. UnionFS (
.orig
.rw
):
cp -al /etc /etc.orig
mv /var /var.orig
mv /home /home.orig
mkdir /etc.rw /var /var.rw /home /home.rw
,
fstab(5)
proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat ro 0 2
/dev/mmcblk0p2 / ext4 ro 0 1
mount_unionfs /etc fuse defaults 0 0
mount_unionfs /var fuse defaults 0 0
mount_unionfs /home fuse defaults 0 0
none /tmp tmpfs defaults 0 0
7.
,
.bash_history
, - .. , , (,
/var.orig
var
).
, . , ,
single user root
. ,
read-only read-write :
mount -o rw,remount /
Jika sistem boot secara normal dalam read-only dan melakukan semua fungsi, selamat!Ini lahir dari Internet Thing.8. Mencetak sistem file
Jika Anda perlu mencetak sistem, pertama kembalikan sistem kuda ke status baca-tulis (lihat di atas). Kemudian komentari fstab(5)
baris yang dimulai dengan kata mount_unionfs
, setelah itu * pastikan * kembali ke tempat direktori /var.orig
dengan semua konten (dan lebih disukai /home.orig
juga). Jika Anda tidak mengembalikannya /var
, Anda akan kehilangan database paket yang diinstal, tetapi itu karena menginstal pembaruan keamanan dengan tim yang apt-get
baru saja Anda cetak sistemnya, bukan? Sebelum apt-get
mem-boot ulang sistem dan pastikan sudah memadai. Cara menyegel kembali, Anda tahu;)Alternatif
, ( read-only) Raspberry Pi , . , , :)
( HDMI-),
, , , . Raspberry Pi , :)
, .
UPD: OverlayFS
ValdikSS OverlayFS, Linux 2014, , initramfs
. art_gl : Raspbian with Read-only Root.
, Domoticz, , OverlayFS. Sauron Domoticz.
UPD: SquashFS
Vooon, Vcoderlab, av_in et al SquashFS. , «» union mount
, . , SquashFS by-design read-only, .. firmware-, () , . , , . , IoT . , , SquashFS, - ? , , community- SquashFS, .. Raspberry Pi. , OpenELEC.
UPD: F2FS
nlykl F2FS aka «Flash-Friendly File System», HOWTO: Replace the micro SD card's ext4 root partition by f2fs on the Raspberry PI. DISCLAIMER: . . F2FS -.
UPD:
ilmarin77 : Network booting. . , , , , ( ) . USB-Ethernet LAN9514 0..70°C
UPD: USB-
ilmarin77 USB: How to boot from a USB Mass Storage Device on a Raspberry Pi 3. SSD, USB, , microSD, USB 2.0 (- 30-40/, ). , . , read-only microSD, SSD , . USB- , microSD, .
UPD: (watchdog)
homecreate systemd
, , . . .
UPD:
?
. , - , S.M.A.R.T HDD SSD. SanDisk, , , EXTCSD. - , Linux . , , smartd(8)
.
« Linux- SD- /» , , (.. uptime , 10 ). , ( sudo root):
uptime
cat /sys/block/mmcblk0/stat | awk '{printf "Uptime read: %.3fMiB (%.1f%% I/Os merged) written: %.3f MiB (%.1f%% I/Os merged)\n", $3*512/1048576, $2/$1*100, $7*512/1048576, $6/$5*100}'
, , , «» . , Meklon -, openELEC / KODI. 6 72 66. / 1:1, SquashFS ( SD- ). / 5:1 10:1, . , 10 — , .
, : 512 , , erase- . Optimizations for Cheap Flash Media Arnd Bergmann (, .) «» , .. 32, erase- 4..8. «» , 512 erase-, .. 64 , stat
. 6/, microSD- .
, .
Make Raspbian System Read-Only
blog.pi3g.com/2014/04/make-raspbian-system-read-only
()
How to make RaspberryPi truly read-only, reliable and trouble-free
k3a.me/how-to-make-raspberrypi-truly-read-only-reliable-and-trouble-free
( )
Protect your Raspberry PI SD card, use Read-Only filesystem
hallard.me/raspberry-pi-read-only
( sisaenkov, , )
Stopping SD Card Corruption on Raspberry Pi’s Raspbian
ideaheap.com/2013/07/stopping-sd-card-corruption-on-a-raspberry-pi
( )
Raspberry Pi — VNC localhost
habrahabr.ru/post/212661
RTC ( ) Raspberry Pi
raspberrypi.ru/blog/598.html
( I2C- DS3231)
How to boot from a USB Mass Storage Device on a Raspberry Pi 3
www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/msd.md
Network booting
www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/net.md
ECIO(TM), a powerful USB programmable single chip computer based on PICmicro microcontroller technology
www.matrixtsl.com/product.php?Prod=ECIO28P
Easy Raspberry Pi Based Screensaver/Slideshow for Exhibitions/Store Front
www.instructables.com/id/Easy-Raspberry-Pi-Based-ScreensaverSlideshow-for-E
( 6)
Flash memory card design (2013)
wiki.linaro.org/WorkingGroups/KernelArchived/Projects/FlashCardSurvey
( , ? FAT; ; 2013)
Optimizing Linux with cheap flash drives, Arnd Bergmann, 2011
lwn.net/Articles/428584
( )
Optimizations for Cheap Flash Media, Arnd Bergmann, 2011
free-electrons.com/blog/elce-2011-videos
( , , )
SD Association, Simplified Specifications, Part 1 Simplified: Physical Layer Simplified Specification
www.sdcard.org/downloads/pls/index.html
Block layer statistics in /sys/block/<dev>/stat
www.kernel.org/doc/Documentation/block/stat.txt
( SD- : cat /sys/block/mmcblk0/stat
uptime
)