Existe-t-il une distribution Linux qui exécutera facilement le «style intégré» sur un Raspberry Pi? [fermé]

9

J'ai besoin d'une distribution Linux qui me donnera les informations suivantes:

  • Exécuter sur un Raspberry Pi
  • Peut survivre de manière fiable à une perte de puissance (comme via un système de fichiers en lecture seule)

J'ai pu rechercher de la documentation sur la façon de changer une distribution Linux régulière en mode lecture seule. J'espérais qu'il y aurait une distribution déjà construite qui était conçue pour fonctionner dans un environnement intégré.

Je n'ai pas besoin de nombreux packages ou pilotes, juste assez pour que le Pi fonctionne avec USB / Ethernet. Je n'ai besoin d'aucune interface graphique ou quoi que ce soit, cela exécutera simplement un service personnalisé intégré en C.

Est-ce que quelqu'un connaît une distribution qui conviendrait?

Dan Harper
la source
Étant donné qu'il s'agit d'une application intégrée, deux choses rapides que vous voudrez peut-être noter. Tout d'abord, si vous décidez de suivre la voie Linux, envisagez d'utiliser un noyau en temps réel pour vous assurer que votre système peut répondre assez rapidement. Deuxièmement, vous pouvez également configurer le minuteur de surveillance pour qu'il agisse en cas de boucles / erreurs logicielles.
Percée
Consultez raspberrypi.stackexchange.com mais je pense que cette question est également hors sujet car c'est une question de type shopping,
Kevin Panko

Réponses:

3

La plupart des systèmes embarqués utilisent un noyau personnalisé. Un outil pour faciliter cela est Buildroot , un ensemble de scripts pour construire la chaîne d'outils GNU gcc, la bibliothèque uClibc à la place de l'énorme bibliothèque GNU libc, le noyau Linux, BusyBox et d'autres utilitaires / packages pour le système de fichiers racine d'une carte intégrée. Le RaspberryPi est une carte relativement nouvelle, donc son support dans Buildroot est toujours en développement, mais il y a apparemment un projet , un autre projet et le travail d' un individu . Il y en aura probablement plus à mesure que la fabrication de RP augmente et que la distribution s'améliore.

En utilisant Buildroot, vous pouvez construire un noyau Linux et un système de fichiers racine exactement comme vous l'avez décrit dans votre question. Selon la vitesse de votre connexion Internet et les capacités de votre PC de développement, vous pouvez disposer des fichiers binaires en 1 à 4 heures et plus. L'inconvénient est que les binaires résultants ne sont pas testés ni garantis pour démarrer et exécuter avec succès. Une console système est obligatoire pour déboguer la séquence de démarrage. Voir ma réponse pour Comment puis-je accéder à mon mini-pc (RaspberryPi / MK802 / Mele A1000 / VIA APC) via Ethernet / wifi sans moniteur? Mais étant donné que le RaspberryPi a été conçu pour être incassable , cet inconvénient ne devrait pas être dissuasif pour la construction de votre noyau personnalisé et de votre RFS.

Concernant "survivre à une perte de puissance": Une sélection appropriée du système de fichiers peut généralement atténuer ce problème. L'expérience a montré que la couche de périphérique MTD plus un système de fichiers de journalisation (par exemple jffs2) était assez robuste. Pour une protection quasi absolue, il y a les initramfs qui utilisent ramfs(pas un disque virtuel de taille fixe) sans basculement vers un système de fichiers R / W.

Addenda

Une introduction de 30 diapositives sur les fonctionnalités de Buildroot est ici
À la fin (# 27), il est fait mention de quelques outils similaires et alternatifs pour construire des systèmes embarqués.

sciure
la source
2

TinyCoreLinux est en lecture seule par défaut (la persistance est facultative): http://www.tinycorelinux.net/ports.html

avra
la source
Vous n'avez pas vu le titre "Arm V6 Raspberry Pi" sur le lien que j'ai fourni?
avra
Il me semble avoir manqué cela. Vote positif;)
Journeyman Geek
1

Ayant eu un Seagate Dockstar avec accès à la console, j'ai installé Debian Squeeze dessus. Comme point de départ pour le faire fonctionner sur root en lecture seule, j'ai utilisé cet excellent article 1 de Jeff Doozan. La stratégie de base consiste à créer un script qui, à chaque démarrage, monte les répertoires inscriptibles nécessaires en tant que tmpfs. Je cite le script de Jeff 2 ici (bravo à Jeff!)

#!/bin/bash
DIRS="/tmp /var/log /var/run /var/lock /var/tmp /var/lib/urandom /var/lib/dhcp /etc/network/run"
for DIR in $DIRS; do
  echo "Mounting $DIR as tmpfs"
  mount -n -t tmpfs tmpfs $DIR
  if [ -d "$DIR-saved" ]; then
    echo "Restoring $DIR-saved to $DIR"
    tar -C "$DIR-saved" -cf - ./ | tar -C "$DIR" -xpf -
  fi
done

echo "nameserver 4.2.2.1" > /var/tmp/resolv.conf
touch /var/lib/dhcp/dhcpd.leases

exec /sbin/init

Enregistrez les lignes ci-dessus en tant que script appelé / sbin / init-ro sur vos rootfs cibles et rendez-le exécutable.

chmod 755 /sbin/init-ro

Afin d'utiliser ce script au démarrage, vous devez préparer un peu les rootfs du système (tous cités dans le script 2 de Jeff (adapter $ROOTà l'emplacement réel de vos rootfs montés).

# Configure dhcp-client to write resolv.conf to /tmp instead of /etc
sed -i 's/\/etc\/resolv.conf/\/var\/tmp\/resolv.conf/' $ROOT/sbin/dhclient-script > /dev/null 2>&1
rm $ROOT/etc/resolv.conf
ln -s /var/tmp/resolv.conf $ROOT/etc/resolv.conf


# make /etc/network/run/ a symlink to /tmp/network/
rm -rf $ROOT/etc/network/run
ln -s /var/tmp/network $ROOT/etc/network/run


# Fixes from http://wiki.debian.org/ReadonlyRoot

rm $ROOT/etc/blkid.tab  > /dev/null 2>&1
ln -s /dev/null $ROOT/etc/blkid.tab

rm $ROOT/etc/mtab  > /dev/null 2>&1
ln -s /proc/mounts $ROOT/etc/mtab

rm $ROOT/etc/rcS.d/S12udev-mtab

rm -rf $ROOT/var/log/*

Après avoir préparé les rootfs comme ci-dessus, vous pouvez monter les rootfs en lecture seule dans / etc / fstab (remplacez ext2 par le système de fichiers que vous utilisez ou utilisez simplement rootfs à la place).

/dev/root  /                 ext2  noatime,ro   0 1

Enfin, vous devez ajouter ce qui suit à vos paramètres de noyau (c'est-à-dire dans /boot/cmdline.txt sur Raspi) afin d'exécuter le script avant le / sbin / init réel . (ce qui suit n'est qu'un exemple de paramètres root et rootdelay . la partie importante qui doit être ajoutée à la ligne dans cmdline.txt est init=/sbin/init-ro.)

root=/dev/mmcblk0p2 rootdelay=2 init=/sbin/init-ro

Mais sachez que pour tout logiciel nécessitant un accès en écriture sur les rootfs, vous devez monter les emplacements tmpfs appropriés ou écrire sur le stockage externe.

Andreas
la source
1

Mes 2 cents, il est beaucoup plus facile (et plus agréable à la fin) de faire une sauvegarde de batterie fiable pour un Pi que de vivre avec un système d'exploitation en lecture seule. Bien sûr, cela signifierait que vous aurez besoin de quelques connaissances de base en électronique (et je veux dire BASIC; nous parlons de 3-4 composants). Ce gars en a fait un avec un peu plus: /raspberrypi/1360/how-do-i-build-a-ups-like-battery-backup-system

Dans ce cas, N'UTILISEZ PAS LiPo; NiCad est ce que vous voulez. LiPo ne peut pas prendre constamment le pas sur la charge; tu as été prévenu.

De plus, vous semblez très inquiet à propos de quelque chose qui, selon mon expérience, est un problème très mineur. Je fouille mes boîtes Linux tout le temps et un arrêt soudain et imprévu est une évidence lorsque je ne peux pas être dérangé. Si vous désactivez les journaux, vous obtiendrez rarement des plaintes à ce sujet.

Pour désactiver tous les journaux, vous pouvez ajouter la ligne suivante comme première règle dans /etc/rsyslog.conf:

*.* ~

Même en cas de problème, 99,9999% du temps (j'entends par là presque à chaque fois dans mon expérience personnelle) ce problème est résolu lors de la prochaine analyse du disque. Lorsque cela se produit, cela dépend principalement de la météo, le système d'exploitation a remarqué ce que vous avez fait (étrangement, ce n'est généralement pas le cas). Puisqu'un Pi utilise des cartes SD, j'imagine que cela se produit encore moins sur un Pi que sur mon PC.

krowe
la source
1

Si je me souviens bien, un système de fichiers en lecture seule ne «sécurisera» pas la carte SD. J'ai 10 Pi en cours d'exécution chez un client (temps de fonctionnement actuel sur 80 jours pour la moitié d'entre eux) où la puissance n'est pas aussi stable que vous attendez / voulez. Il m'a fallu un certain temps pour trouver des alimentations (chargeurs bon marché évalués à 3A et chargeurs iPad `` chers '' évalués à 2,3A) qui pourraient en fait faire fonctionner le Pi pendant plus de quelques jours, avant que j'aie eu toutes sortes de problèmes de corruption SD , y compris avec un qui était uniquement utilisé en lecture seule IIRC.

Mon problème est principalement résolu maintenant (en raison des nouvelles fournitures), mais pour les projets futurs, j'envisage de créer un système de fichiers racine NFS. Il existe déjà de nombreux tutoriels à ce sujet, principalement pour résoudre les images Pi fs normales, mais il est assez facile de faire un debootstrap minimal et de le changer en un système de fichiers racine en lecture seule sur NFS. Associez-le à uboot pour le Pi et à un script de démarrage intelligent, et votre carte SD ne contiendra que quelques mégaoctets de micrologiciel RPi, image de démarrage et script de démarrage.

mycroes
la source
0

J'ai entendu de bonnes choses à propos de Puppy Linux pour cela. Bien que je dois admettre que je ne l'ai pas essayé.

Il peut être configuré pour ne pas réécrire sur la carte SD.

Chenmunka
la source
-1

Il y a quatre images disponibles sur la page de téléchargement de raspberrypi.org :

  • Debian "wheezy"
  • Debian à flotteur doux "sifflant"
  • Arch Linux ARM
  • QtonPi

Et voici le seul qui est en lecture seule par défaut (mais qui peut être modifié si nécessaire):

Espérons que l'un d'eux répondra à vos besoins.

Yedric
la source
Aucun de ceux-ci n'est en lecture seule par défaut.
Alex Chamberlain
@alex, bon point.
Yedric
TinyCoreLinux ajouté à la liste. Il est en lecture seule par défaut.
avra