[Arm-dev] Stateless CentOS on ARM question
Jordi Sanfeliu
jordi at fibranet.cat
Wed Jun 5 08:56:18 UTC 2019
Hello,
I'm not sure if what you call 'diskless' or 'stateless' you also mean a
'non-destructible' filesystem, which was a concept used on early Linux
routers.
Anyway, this is what I do.
I'm using CentOS 7 on Raspberry Pi 3 to create Linux routers/gateways
for multiple devices (communicating with radio-frequency) on an IoT
environment. The Linux system must be capable to survive to power
outages at any moment without suffering filesystem corruption. Hence the
concept 'non-destructible' filesystem.
I accomplish this by creating a squashfs of the root filesystem with
very minimal set of packages. That is, right after the installation of
CentOS 7 image, I do a lot of 'yum remove' and 'rpm -e' over multiple
packages that I don't need. Once done, I squashfs the root filesystem
into a file that occupies no more than 270MB.
With that image I can now create a new microSD with /boot, /data and
/root partitions, and copy the squahsfs image directly into /root
partition. I use the /data partition as the non-volatile space to save
configurations, metric data, notifications, etc. coming from the IoT
devices. Then I use Busybox to create a small filesystem that will be
used as the initramfs. You can use this tree [1] as a good starting
point, or make your own. Don't forget to include the squashfs and
overlayfs kernel modules.
In that initramfs I create the /init program which can be a simple shell
script. Such init file will be the responsible to setup the system
booted on the initramfs to switch to the root filesystem on the squashfs
image:
- mount /proc and /sys filesystems.
- make /dev with 'mdev -s'.
- install the squashfs and overlayfs kernel modules (which won't be
installed by default in the current boot with initramfs).
- mount the squashfs (i.e: in /ro).
- create the tmpfs (no less than 300MB) and mount it (i.e: in /rw).
- mount the writable overlayfs combining /ro and /rw.
- prepare the switch with 'mount --move' /rw and /ro into the overlay.
- and finally 'switch_root /root /sbin/init'.
In the /boot (FAT) partition I place the same Raspberry Pi files that
CentOS 7 have in its own /boot. The only change is the line 'initramfs
initramfs.gz' appended into the /boot/config.txt file.
Caveats. I'm still using the kernel version 4.9.80-v7.1 because the
4.14.43-v7.1 version panics randomly during boot. It looks like the
kernel is unable to detect /dev/mmcblk0 sometimes. I've not tested the
latest 4.14.111 yet.
1 - <https://github.com/raspberrypi/target_fs>
I hope that helps you.
Regards.
On 6/4/19 8:16 PM, Seth Meyer wrote:
> Hello,
>
> A colleague and I are trying to get an ARM server to boot stateless
> (i.e. diskless). Has anyone had any success with this? Our primary
> source of inspiration is the documentation for the Pegasus cluster:
>
> http://web.mst.edu/~vojtat/pegasus/administration.htm
>
> Basically, the idea is to have the kernel load a custom initramfs that
> decompresses a file system image onto a tmpfs at boot time (along with
> some other setup), then execute a `switch_root` to said tmpfs.
>
> We have succeeded in getting an x86_64 machine to boot (mostly)
> diskless, using the disk only for the boot process by creating a GRUB
> entry. However, when we try this with my ARM (ThunderX) server, the
> kernel panics during the boot process because it cannot find init. We
> have also tried passing `init=/init` as a kernel parameter with no luck.
> The error message is
>
> Kernel panic - not syncing: No working init found. Try passing init=
> option to kernel. See Linux Documentation/init.txt for guidance.
>
> We looked at the referenced documentation and it's not a ton of help for
> my specific case. The initramfs environment is based on Busybox, which
> we compiled on a ThunderX machine (the same one we are trying to boot
> from, in fact).
>
> We have considered compiling my own kernel with the initramfs built in,
> but we are trying to avoid doing that. Further, we have tried with the
> 3.10 and 4.4 kernels on x86, and with 4.5 and 4.14 kernels on aarch64.
>
> Does anyone have any guidance? Also, please let us know if you need
> more information.
>
> Best regards,
>
> Marc Patton and Seth Meyer
> ARC-TS - https://arc-ts.umich.edu/
> University of Michigan
>
>
>
>
>
>
> _______________________________________________
> Arm-dev mailing list
> Arm-dev at centos.org
> https://lists.centos.org/mailman/listinfo/arm-dev
>
--
Jordi Sanfeliu
FIBRANET Network Services Provider
https://www.fibranet.cat
More information about the Arm-dev
mailing list