J'ai pris une très mauvaise décision sur l'un de mes serveurs.
J'ai supprimé /bin/sh
. J'ai redémarré le serveur et le serveur ne fonctionnera pas car il doit /bin/sh
démarrer les scripts rc. Je ne peux pas non plus accéder au mode mono-utilisateur car sh est nécessaire.
Existe-t-il un moyen simple de réinstaller le shell bourn?
J'ai essayé de copier sh à partir d'un cd live, il a échoué sur la bibliothèque ld-elf.so.1. J'ai donc copié cela dans / libexec du livecd sur ma partition /. Il a ensuite besoin de la bibliothèque libedit.so et je l'ai copié dans / libexec mais cela ne fonctionne pas cette fois.
J'ai essayé un lien symbolique vers /usr/local/bin/bash
mais cela me présente toujours une erreur de type "ne peut pas trouver sh". Je suppose que c'est parce que /usr
n'est pas encore monté car il est fait à partir d'un script rc.
Toute aide est grandement appréciée.
Réponses:
Vous devez remplacer / bin / sh par quelque chose ; c'est la clé. Si vous pouvez accéder au chargeur FreeBSD au démarrage (avec une invite "ok"), essayez quelque chose comme ceci:
J'ai obtenu ces informations du chargeur (8) des pages de manuel de FreeBSD (en ligne). Je ne l'ai pas fait, mais cela devrait fonctionner (en supposant que / bin / csh est présent et exécutable).
Si vous avez un serveur FreeBSD 8.2 opérationnel ailleurs, vous pouvez essayer de voler le / bin / sh de cette source et de le placer dans le système si nécessaire.
Alternativement, obtenez un / bin / sh construit statiquement et mettez-le à la place; il n'y aura aucun problème de bibliothèque avec un binaire construit statiquement.
EDIT: J'aurais dû noter: si vous démarrez dans / bin / csh, vous devez toujours obtenir quelque chose à utiliser à la place de / bin / sh. Vous pouvez l'obtenir sur Internet ou le copier à partir d'un autre CD ou d'un package ou quelque chose; utiliser / bin / csh pour démarrer vous permet d'accéder à la machine. La copie sur le réseau nécessite que vous ouvriez le réseau; sinon, copiez à partir d'un CD-ROM.
Les meilleurs moyens d'éviter cela à l'avenir:
Faites les trois.
la source
OK, d'abord la conférence:
NE PAS AVEC SYSTÈME MESS BINARIES
Tout en
/bin
,/sbin
et/rescue
sur FreeBSD devrait être laissé seul. Même si vous savez ce que vous faites (si vous savez ce que vous faites, vous savez également que ceux-ci doivent être laissés seuls. Ils sont vraiment importants - tous!)NE supprimez PAS
/bin/sh
. DÉJÀ. Sur tout système * NIX qui en est équipé.Vraiment. Ne le fais pas. Un LOT de scripts comptent sur
/bin/sh
être un Bourne Shell. Cela brise l'univers.Si vous voulez vraiment vous pouvez probablement remplacertoute sécurité avec une copie de
bash
comme Adam Z suggéré, mais si vous allez faire que vous pouvez lien statiquement cette copiebash
- Il tire dans beaucoup de bibliothèques, et vous peut ne pas les avoir avant que le système ne soit en place et/usr/local
monté.Maintenant, comment réparer le désordre? Deux options:
Option 1: un peu pénible
Rendez-vous sur http://www.freesbie.org/ (ou le LiveBSD FreeBSD de votre choix - Vous pouvez probablement même utiliser le CD de récupération de http://www.freebsd.org pour cela). Prenez le LiveCD, gravez-le et démarrez-le.
Une fois que vous êtes dans l'environnement LiveCD, montez la partition racine de votre système éclaté, copiez le
/bin/sh
depuis le LiveCD sur votre ordinateur, puis redémarrez.Cela devrait vous permettre de vous remettre en marche et de fonctionner - Vous voudrez peut-être suivre les instructions pour reconstruire "World" , ou au moins recompiler à
/bin/sh
partir d'une arborescence source qui correspond à votre système en cours d'exécution.Option 2: moins douloureuse, pas de LiveCD
Si vous avez une autre boîte FreeBSD autour de laquelle vous pouvez vous déconnecter (ou d'une autre manière de mettre la main sur une copie de
/bin/sh
, mettez votre machine FreeBSD en mode utilisateur unique. Configurez le réseau (ou montez quel que soit le support contenant le shell de remplacement), et copiez-le là où il est censé se trouver.Redémarrez et vous devriez être OK - mêmes mises en garde que le LiveCD bien que si
/bin/sh
vous le saisissez, il ne provient pas d'une machine raisonnablement proche de l'identique.la source
/bin
n'est plus lié statiquement. Je pense que les CD Rescue pour la version appropriée de FreeBSD ont un shell utilisable (c'est-à-dire un qui peut juste être vidé en place), mais cela fait un moment que jeAu lieu de créer des liens symboliques, copiez votre fichier
bash
dans/bin/sh
. Utilisez laldd
commande pour rechercher toutes les bibliothèques susceptibles de résider sur des systèmes de fichiers autres que rootfs et copiez-les également dans rootfs.la source