8 votes

Comment pourrais-je exécuter mon système uniquement dans un ramdisk après la connexion (ou éventuellement au démarrage) ?

Je sais comment créer des ramdisks ponctuels, mais je ne suis pas sûr de savoir comment faire ce qui suit:

  • configurer un environnement de développement en utilisant un stockage persistant traditionnel
  • au prochain démarrage, avoir la possibilité de mettre mon dossier personnel dans un ramdisk (ou tout le système)
  • comme l'environnement de développement a été préconfiguré, cela m'importe peu si le ramdisk est perdu lors du redémarrage ou d'une coupure de courant. Puisque je fais régulièrement des commits sur git, le seul stockage persistant supplémentaire dont j'ai besoin est sur git.

Je comprends que cela demandera beaucoup de RAM, mais en mettant de côté les limitations physiques, comment configurer cela?

10voto

Fabby Points 33498

Vous pouvez avoir votre environnement entièrement en RAM, mais :

  • Rien ne serait persistant!
  • Vous auriez besoin d'une quantité de RAM de la taille d'un SSD: 64G serait petit, 128G serait confortable

Possibilité 1 : Système entier en RAM :

  1. Installer Ubuntu sur une clé USB¹
  2. Convertir la clé USB¹ en un fichier ISO en utilisant Gnome Disks
  3. Ajouter le fichier ISO à grub
  4. Démarrer ce fichier ISO

Voilà ! Un environnement entièrement en RAM !

Possibilité 2 : /home en RAM :

  1. Créer un disque RAM
  2. Démarrer normalement
  3. Rsync tout /home dans le disque RAM
  4. mount bind le disque RAM à /home
  5. Lors de l'arrêt, vous perdez tout ce qui est dans le disque RAM ou vous devez faire l'inverse de #3

Tout cela est technologiquement possible mais impraticable car :

  • vous devez effectuer toutes vos mises à jour / réglages système sur la clé USB persistante¹ et convertir en ISO chaque fois que vous souhaitez modifier un seul octet persistant. (Vous voulez qu'une option soit activée dans votre IDE ? Eh bien... Activez-la et recréez l'ISO...)
  • Cela nécessite une quantité énorme de RAM car vous avez besoin de tout votre disque ou de tout votre environnement home en RAM et suffisamment de RAM pour exécuter les applications dont vous avez besoin.
  • Vous devez rsync les données que vous voulez rendre persistantes.
  • Le temps perdu à effectuer ce qui précède annulerait les avantages que vous en retireriez.

Note 1 : Je prends une clé USB comme exemple, cela pourrait aussi être une partition / disque sur votre PC mais une clé USB rendrait les choses plus faciles car vous pouvez également dupliquer une clé USB sur une autre clé USB pour avoir une sauvegarde de cet environnement.

4voto

Kishan Parekh Points 221

Je travaille sur deux solutions pour mon équipe qui a besoin d'utiliser GIMP sur Ubuntu. Dans votre cas, GIMP sera remplacé par un ensemble d'outils de développement.

(Note: Dans votre cas, si vous souhaitez préserver le contenu d'un disque RAM, vous devrez utiliser les suggestions de Fabby et Zeiss, et vous n'aurez plus besoin de monter /tmp et /var/tmp décrits ci-dessous en tant que disque RAM)

Les défis que j'aborde sont :

  1. Ne laisser aucune trace de fichiers traités par l'une des applications. (Dans mon cas, je désactive également le swap pour la même raison). Certains outils de développement peuvent nécessiter une grande mémoire, vous devrez donc vraiment considérer la quantité de RAM dont vous aurez réellement besoin.
  2. Certains programmes peuvent utiliser /var/tmp et /tmp en plus d'un répertoire personnel. Aucune trace ne doit être laissée sous aucun de ces fichiers sans désactiver explicitement le bit sticky sur ces répertoires (autrement certains programmes pourraient ne plus fonctionner)
  3. Le système doit toujours fournir une image propre d'un répertoire personnel -- donc même les changements de configuration ne sont pas conservés.
  4. L'utilisateur régulier ne doit pas avoir de privilèges sudo.
  5. Doit fonctionner pour tous les programmes GUI pris en charge par toutes les distributions sans aucune manipulation (sinon j'aurais simplement utilisé des images Docker). La solution doit également être implémentable sur n'importe quelle distribution Linux sans manipulations spéciales. Elle doit être installée et gérée par un administrateur système de niveau 1.
  6. L'utilisateur administrateur doit avoir un moyen de mettre à jour le système selon les besoins.

Solution 1: Conforme à la suggestion de Fabby sous la Possibilité 2 (Basse complexité)

  1. Créez deux comptes : le premier est le compte par défaut créé au moment de l'installation de la distribution (Sur Ubuntu, généralement ce compte a des privilèges sudo). Disons que le compte par défaut est admin avec un répertoire personnel /home/admin, tandis que le 2ème compte est dit developer, avec un répertoire personnel défini en /ramdisk. Lors de la création du 2ème compte, assurez-vous qu'il ne crée pas de répertoire personnel. Le compte developer ne doit pas avoir de privilèges sudo. Le mot de passe du compte root doit être verrouillé, pour éviter la tentation d'utiliser su tout en travaillant sous le compte developer. Si vous êtes extrêmement paranoïaque, vous souhaiterez peut-être utiliser chroot pour developer et ne pas conserver de programmes set-uid dans le répertoire chrooté.

  2. Testez tout (par exemple configurez .gitconfig, gitignore, .bashrc et quelques autres fichiers de configuration) jusqu'à ce que tout fonctionne correctement. Assurez-vous que TMPDIR=/ramdisk/tmp est défini dans .bashrc pour que même les répertoires temporaires puissent être créés sur le grand disque RAM par les programmes qui respectent TMPDIR.

    Une fois testé, désactivez la fonction de mise à jour automatique selon les instructions applicables à votre distribution. C'est un must car je recommande également de monter /tmp et /var/tmp sur un disque RAM de la plus petite taille possible (voir 5 ci-dessous), et vos programmes de mise à jour automatique pourraient corrompre votre système.

  3. Copiez /home/admin dans un répertoire séparé, par exemple sous /var/warehouse/devtools-home. Nettoyez tout ce qui n'est pas explicitement requis en tant qu'image non altérée de /var/warehouse/devtools-home, pour le maintenir aussi petit que possible. Créez une archive ZIP de /var/warehouse/devtools-home -- une image de répertoire personnel.

  4. Ajoutez une entrée dans /etc/fstab pour un disque RAM (tmpfs) de taille requise, monté sur /ramdisk, avec les options de montage comme uid=developer,gid=developer,mode=700,default,noatime,nodev,nosuid,noexec.

  5. Mettez à jour /etc/fstab pour monter /tmp et /var/tmp en tant que tmpfs si votre distribution n'utilise pas de disque RAM pour ces répertoires. (J'essaie de le maintenir aussi petit que possible).

  6. Ajoutez une tâche cron avec @reboot pour décompresser l'image du répertoire personnel du développeur sous /ramdisk et chown -R developer.developer /ramdisk. Vous pouvez utiliser des services de démarrage ou l'équivalent de rc.local pris en charge par votre distribution.

  7. Redémarrez et testez tout. Connectez-vous en tant que developer pour le travail régulier. Redémarrez la machine, et toutes les traces sont perdues, et une fois de plus, vous obtenez une copie fraîche du répertoire personnel avec sa configuration par défaut.

  8. Lorsque vous devez effectuer des mises à niveau ou ajouter de nouveaux outils, connectez-vous en tant que admin, démontez /tmp et /var/tmp, effectuez les mises à niveau, puis redémarrez le serveur. Si vous souhaitez changer les paramètres par défaut du répertoire personnel, suivez les étapes (2) et (3) ci-dessus et créez une nouvelle image de répertoire personnel.

Solution 2: Serveur de démarrage PXE central (Complexité élevée par rapport à la solution ci-dessus)

(Je travaille actuellement sur cette solution donc toutes les étapes peuvent ne pas être dans l'ordre précis)

La Solution 1 est bonne pour une machine unique. Si vous souhaitez créer un environnement complet pour plusieurs postes de travail dans un LAN, celle-ci peut devenir trop lourde à gérer. Cependant, vous ne souhaitez pas perdre la puissance d'utilisation d'un CPU haut débit et de la mémoire RAM élevée des postes de travail modernes. Dans ce cas, un serveur de démarrage PXE central est recommandé plutôt qu'un serveur de terminaux central. Sans entrer dans trop de détails, voici ce dont vous avez besoin :

  1. Un serveur Linux central avec TFTP, DHCP, NFS, serveur central Syslog et services LDAP.
  2. Configurer le service LDAP avec les comptes / groupes requis.
  3. Configurer TFTP pour fournir un noyau Linux à un poste de travail et monter la partition racine en lecture seule via NFS qui aura une image de votre distribution plus les outils de développement requis. L'image montée via NFS doit également être configurée pour s'authentifier via LDAP. Vous devrez également avoir /etc monté comme une partition / répertoire distinct par appareil en raison de la possibilité d'une configuration d'affichage différente.
  4. Utilisez des postes de travail sans disque avec un CPU haute vitesse et une mémoire RAM élevée. Configurez le BIOS du poste de travail pour utiliser le démarrage PXE.
  5. Assurez-vous que le disque RAM de la configuration requise est créé sur le poste de travail et que le répertoire personnel est monté sur le disque RAM, et que l'image de répertoire personnel est copiée comme décrit dans la Solution 1. Syslog s'exécutant sur le poste de travail doit envoyer des syslogs à un serveur syslogs central.
  6. Testez tout.
  7. Lorsque vous souhaitez procéder à une mise à niveau, mettez à jour l'image basée sur NFS avec les outils de développement requis, mettez à jour cette image sur un serveur central, puis redémarrez les postes de travail. (Je préfère conserver la dernière et la version actuelle, afin qu'à tout moment, je puisse revenir à l'ancienne version si un problème est signalé dans les nouvelles mises à jour).

1voto

Mattio Points 817

Essayez le paquet overlayroot.

Overlayboot chargera votre système en lecture seule, avec une option pour sauvegarder les modifications locales persistantes sur une partition différente... ou simplement les supprimer.

L'installation est super simple: sudo apt install overlayroot

Configurez en modifiant /etc/overlayroot.conf. Les instructions se trouvent dans le fichier, il vous suffit de modifier la ligne en bas du fichier pour activer. Pour exécuter votre système entièrement en RAM: overlayroot=tmpfs

Et redémarrez. Votre console de connexion vous rappelle maintenant que vous utilisez overlayroot. Votre système est maintenant en lecture seule.

Pour désactiver temporairement (pour les mises à jour, etc.), passez une commande à GRUB: overlayroot=disabled

Pour désactiver définitivement, modifiez à nouveau le fichier de configuration.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X