J'ai une charge de 14,04 systèmes de kiosques, à mi-chemin à travers le pays. Ce sont des petits appareils intégrés horribles. Je dois tous les mettre à niveau vers 16.04 pour prendre en charge une nouvelle pile logicielle. do-release-upgrade
fonctionne la moitié du temps. L'autre moitié, il détruit l'installation. En outre, les processeurs sont très lents et les connexions réseau sur certains sites sont également assez médiocres. Ainsi, même lorsque cela fonctionne, la mise à niveau prend beaucoup de temps.
Donc nouveau plan.
Je peux créer une image système entièrement installée pour chaque kiosque dans Virtualbox, LXC ou autre.
Il me faut un moyen de récupérer ces images sur les systèmes.
Le principal problème ici est qu'il y a très peu de techniciens disponibles à l'autre bout. Et je ne veux pas parcourir 200 miles pour le faire moi-même. J'ai besoin de quelque chose qui est presque complètement automatisé et ne nécessite pas de clavier.
J'imagine un scénario où:
C'est cet "élément d'amorçage" que je recherche. Je m'attendais à ce que quelque chose comme cela existe déjà (pour les installations de réimagerie en bloc), mais il est possible que je sois sur un nouveau territoire. Tout ce qui obtient mes images installées sans interférence manuelle (passé de le brancher) obtient des points.
Autant que je sache, des options comme Clonezilla nécessitent que quelqu'un avec un clavier lui dise quoi faire. J'ai besoin de quelque chose qui ne nécessite pas de clavier, mais qui fonctionne.
J'ai aimé créer un script shell bash, qui peut faire son travail automatiquement dans les systèmes installés basés sur Ubuntu ainsi que dans les systèmes persistants, ainsi que dans un petit système '9w' basé sur Debian Jessie. J'espère que cela vous sera utile, ainsi qu'à d'autres personnes dans le futur.
Le script suppose qu'il doit exister deux lecteurs inscriptibles (périphériques de stockage de masse), le lecteur actif et le lecteur cible. Ne pas utilisez toram, cela gâchera l’identification du disque dur.
Les appels au shellscript dus-live
, qui est une partie exécutante de mkusb. Donc, il remplace le shellscript interactif dus
.
_dus-live
_ peut gérer les types de fichiers source suivants,
et le système cible peut avoir à la fois des tables MSDOS et GUID (lorsque le lecteur cible est plus grand que la taille du système d'origine dans l'image).
J'ai utilisé le nom autoclone
:
_#!/bin/bash
# Date Sign Comment
# 2017-06-30 sudodus Created
# 2017-07-01 sudodus checking that there is 1 possible target drive
wait=30
read -t "$wait" -p "WARNING: After $wait seconds '$0' will CLONE AUTOMATICALLY;
from the file given as parameter to the first detected drive
(except the live drive), so it will be overwritten.
If this is not what you want or if you are not sure, PRESS {ctrl + C} NOW !
...
"
function power_off {
read -t "$wait" -p "WARNING: After $wait seconds '$0' will POWEROFF automatically;
If this is not what you want or if you are not sure, PRESS {ctrl + C} NOW !
...
"
Sudo poweroff
}
user=$(whoami)
if [ "$user" != "root" ]
then
echo "run $0 with Sudo or as root"
exit
fi
if [ "$1" == "" ] || ! test -s "$1"
then
echo "Usage: Sudo $0 <with an iso file or image file as parameter>"
echo "Example: Sudo $0 \"file.iso\""
echo "Example: Sudo $0 \"file.img\""
echo "Example: Sudo $0 \"file.img.xz\""
exit
fi
source="$1"
livedrive=$(lsblk -lo name,type,mountpoint | \
grep -m1 -e /$ -e /cdrom$ -e /lib/live/mount/medium -e /lib/live/mount/persistence)
#echo "$livedrive"
livedrive=${livedrive:0:3}
echo "livedrive=/dev/$livedrive"
number_of_targets=$(lsblk -ldo name,type|grep -v "$livedrive"|grep -v zram|grep disk|wc -l)
target=$(lsblk -ldo name,type|grep -v "$livedrive"|grep -v zram|grep disk)
#echo "target=$target"
# echo "number_of_targets=$number_of_targets"
# Sudo lsblk -o name,model,size,type,fstype,label,mountpoint | \
# grep -v "$livedrive"|grep -v zram| grep -v loop|grep -v ' rom '
####
if [ $number_of_targets -ne 1 ]
then
echo '--------------------------------------------------------'
Sudo lsblk -o name,model,size,type,fstype,label | \
grep -v "$livedrive"|grep -v zram| grep -v loop|grep -v ' rom '
echo "$number_of_targets possible target drives found, but
1 possible target drive should be found
for '$0' to work correctly."
if [ $number_of_targets -gt 1 ]
then
echo "--------------------------------------------------------
- Please remove every other possible target drive!
- Or are you running in the wrong computer?"
fi
echo "--------------------------------------------------------"
wait=60
power_off
exit
fi
target=/dev/${target:0:3}
echo "target=$target"
umount "$target"?*
paramfromfile=$(mktemp)
echo "$source
$target" > "$paramfromfile"
# do it with dus-live, which comes with mkusb version 12-
echo "calling 'dus-live' ..."
dus-live pff:"$paramfromfile"
power_off
_
J'ai testé qu'il fonctionne sur deux systèmes live persistants, qui peuvent être installés à partir de fichiers image compressés,
phillw.net/isos/linux-tools/9w/9w-dus_debian-jessie-i686-persist-live_2017-06-07_4GB.img.xz (362 Mio)
Voir plus de détails sur cette méthode sur ce lien,
Ce script peut être démarré automatiquement lorsque la ligne suivante est ajoutée à démarrage automatique, dans Lubuntu via la commande suivante,
_echo 'xterm -fa default -fs 12 -title autoclone -e Sudo /home/lubuntu/autoclone dd_no-biggie-68MB.img.xz' >> ~/.config/lxsession/Lubuntu/autostart
_
Modifiez-le pour qu'il corresponde à l'image 'dd' réelle _/path/name
_ et à l'emplacement réel du shellscript.
La commande correspondante dans 9w est
_echo '@xterm -fa default -fs 12 -title autoclone -e Sudo /root/autoclone /root/dd_no-biggie-68MB.img.xz' >> ./.config/lxsession/LXDE/autostart
_
Vous pouvez vouloir ou devoir créer votre propre système personnalisé (live, persistant live ou installé sur un lecteur USB ou une carte mémoire). Vous pouvez probablement remplacer _dus-live
_ par une simple ligne de commande dd
, du moins si le système que vous souhaitez installer utilise la table de partitions MSDOS.
Ce shellscript a été créé assez rapidement, il fonctionne comme je l’ai testé, mais de nombreux cas ne sont pas testés et des événements inattendus peuvent se produire. Alors, testez-le s'il n'y a pas de lecteur contenant des données précieuses, qui pourraient être écrasées.
Trois captures d'écran de Lubuntu
Pendant les 30 premières secondes, vous pouvez utiliser la combinaison de touches ctrl + C pour arrêter l'autocllon,
Sortie de la console: à ce stade, le système se synchronise (vidage des mémoires tampons vers le lecteur cible),
Pendant 30 secondes, vous pouvez utiliser la combinaison de touches ctrl + C pour éviter la mise hors tension (si vous souhaitez rester dans la session de bureau de Lubuntu),
Une capture d'écran correspondante de 9w
Avez-vous envisagé d'utiliser des duckies en caoutchouc USB de Hak5 https://hakshop.com/collections/usb-rubber-ducky en mode twin-duck. Je les ai utilisées pour installer Ubuntu sur 7 machines. Sur chacun d'entre eux, tout ce que j'avais à faire était de redémarrer les systèmes avec le ducky en caoutchouc branché sur le port USB, car mes systèmes donnaient toujours la priorité au démarrage à partir de l'USB, c'était facile. Mais vous pouvez utiliser deux canards en caoutchouc et en utiliser un pour ajuster vos préférences de BIOS et démarrer à partir d'un périphérique USB tout en utilisant l'autre comme lecteur flash Live Boot et un clavier pour naviguer dans les écrans de démarrage des paramètres produits par le menu d'installation unetbootin
boot. Avec un peu de patience et d'essais et d'erreurs, vous pouvez le faire. Et comme aucun technicien n'est nécessaire sur place, vous pouvez envoyer les canards prêts en caoutchouc aux personnes ayant une proximité physique et un accès aux systèmes.
En mode Twin-Duck, le canard en caoutchouc agit à la fois comme un périphérique HID (dans notre cas, un clavier) et un périphérique de stockage de masse USB. Il vous suffit donc de créer un disque flash amorçable avec unetbootin
sur le stockage de masse USB du Rubber Ducky et d’utiliser la fonctionnalité d’automatisation HID (clavier) - injection de touches - pour automatiser la navigation (touches) nécessaire lors de l’installation du système d’exploitation. . vous pouvez même le faire sur des systèmes sans tête.