Je travaille sur un init
pour un initramfs en C++ pour Linux. Ce script est utilisé pour déverrouiller le lecteur crypté DM-Crypt w/LUKS et définir les unités LVM disponibles.Problèmes avec les appels system() sous Linux
Puisque je ne veux pas avoir à réimplémenter la fonctionnalité de cryptsetup
et gpg
j'utilise des appels système pour appeler les exécutables. L'utilisation d'un appel système pour appeler gpg fonctionne bien si le système est déjà entièrement activé (j'ai déjà un script bash basé sur initramfs qui fonctionne bien pour l'afficher, et j'utilise grub pour éditer la ligne de commande pour l'afficher en utilisant le vieux initramfs). Cependant, dans l'initramfs, il n'agit jamais comme s'il était appelé. Même les commandes comme system("echo BLAH");
échouent.
Alors, est-ce que quelqu'un a quelque chose à ajouter?
Éditer: J'ai donc trouvé ce qui causait mes erreurs. Je n'ai aucune idée de pourquoi il provoquerait des erreurs, mais je l'ai trouvé.
Afin de permettre le branchement à chaud, je devais écrire /sbin/mdev
à /proc/sys/kernel/hotplug
... mais je fini par passer autour des paramètres (une fonction que je me suis écrit pas moins) donc j'écrivais /proc/sys/kernel/hotplug
à /sbin/mdev
.
Je n'ai aucune idée de pourquoi cela causerait le problème, mais il l'a fait.
Merci beaucoup pour votre aide. Vous avez effectivement répondu à une question que je n'ai pas posée pour savoir pourquoi diable il est dit dans les pages de manuel d'utiliser la famille de fonctions 'exec()' au lieu de 'system()' quand elles ont des effets très différents. Si cela ne vous dérange pas, avez-vous un lien utile pour la sortie de la tuyauterie? (De toute façon, j'ai commandé le livre que vous avez suggéré, donc j'obtiendrai éventuellement une bonne ressource :)) – Thomas
Stevens le couvre dans la section 14.2 dans la première édition. Dans la deuxième édition, il est passé à la section 15.2. –
Merci. Je vais être sûr de le chercher. – Thomas