Как я могу создать загрузочный, автоматический диск восстановления USB?
У меня загружено 14,04 киоска, на полпути по всей стране. Это ужасные маленькие интегрированные устройства. Мне нужно обновить их до 16.04 для поддержки нового программного стека. do-release-upgrade
работает половину времени. Другая половина разрушает установку. Кроме того, процессоры очень медленные, а сетевые соединения на некоторых сайтах также довольно плохие. Таким образом, даже когда это работает, обновление занимает много времени.
Итак, новый план.
Я могу сделать полностью установленный образ системы для каждого киоска в Virtualbox, или LXC, или что-то еще.
Мне нужен способ распаковать эти изображения в системы.
Главная проблема в том, что на другом конце очень мало технических специалистов. И я не хочу летать 200 миль, чтобы сделать это сам. Мне нужно что-то, что почти полностью автоматизировано и не требует клавиатуры.
Я представляю себе сценарий, в котором:
- Я делаю системный образ для каждого киоска
- Я делаю загрузочный USB-накопитель для каждого киоска и копирую образ киоска.
- Я маркирую каждый и публикую их.
- С другой стороны, сотрудник с физическим доступом к USB-портам просто подключает нужный диск и перезагружается.
- Загрузочный элемент этого затем записывает и расширяет образ диска.
Это тот "загрузочный элемент", который я ищу. Я ожидал, что что-то подобное может уже существовать (для массовых установок повторного создания изображений), но возможно я на новой территории. Все, что устанавливает мои изображения без ручного вмешательства (после подключения), получает очки.
Насколько я знаю, такие опции, как Clonezilla, требуют кого-то с клавиатурой, чтобы сказать ему, что делать. Мне нужно что-то, что не требует клавиатуры, просто включается и делает это.
2 ответа
Shellscript
Мне понравилось создавать сценарий оболочки bash, который может выполнять свои функции автоматически как в установленных, так и в постоянных живых системах на основе Ubuntu, а также в небольшой системе '9w' на основе Debian Jessie. Я надеюсь, что это будет полезно для вас, а также для других людей в будущем.
В сценарии предполагается, что должно быть два записываемых диска (устройства хранения данных), работающий диск и целевой диск. Не используйте торам, это испортит идентификацию живого привода.
Скрипт звонков dus-live
, которая является исполнительной частью mkusb. Таким образом, он заменяет интерактивный шеллскрипт dus
,
dus-live
может управлять следующими видами исходных файлов,
- file.iso
- file.img
- file.img.gz
- file.img.xz
и целевая система может иметь таблицы разделов MSDOS и GUID (если целевой диск больше размера исходной системы в образе).
Я использовал имя 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
Проверено в постоянных живых системах
Я проверил, что он работает в двух постоянных живых системах, которые могут быть установлены из сжатых файлов изображений,
http://phillw.net/isos/linux-tools/9w/9w-dus_debian-jessie-i686-persist-live_2017-06-07_4GB.img.xz (362 МБ)
Подробнее об этом методе можно узнать по этой ссылке,
Автоматический старт
Этот сценарий может быть запущен автоматически, когда к автозапуску добавлена следующая строка в Lubuntu с помощью следующей команды:
echo 'xterm -fa default -fs 12 -title autoclone -e sudo /home/lubuntu/autoclone dd_no-biggie-68MB.img.xz' >> ~/.config/lxsession/Lubuntu/autostart
Измените его так, чтобы оно соответствовало фактическому изображению 'dd' /path/name
и фактическое местоположение сценария.
Соответствующая команда в 9w
echo '@xterm -fa default -fs 12 -title autoclone -e sudo /root/autoclone /root/dd_no-biggie-68MB.img.xz' >> ./.config/lxsession/LXDE/autostart
Ваша собственная система
Возможно, вы захотите или должны будете создать собственную систему (живую, постоянную или установленную на USB-накопителе или карте памяти). Вы, вероятно, можете заменить dus-live
с простым dd
командной строки, по крайней мере, если система, которую вы хотите установить, использует таблицу разделов MSDOS.
отказ
Этот шеллскрипт был написан довольно быстро, он работает, как я тестировал, но есть много случаев, которые не тестировались, и могут случиться непредвиденные ситуации. Поэтому, пожалуйста, проверьте его там, где нет диска с ценными данными, которые могут быть перезаписаны.
Скриншоты
Три скриншота Lubuntu
В течение первых 30 секунд вы можете использовать комбинацию горячих клавиш Ctrl + C, чтобы остановить автоклонирование,
Вывод на консоль: на этом этапе система синхронизируется (сбрасывает буферы на целевой диск),
В течение 30 секунд вы можете использовать комбинацию горячих клавиш ctrl + C, чтобы избежать отключения питания (если вы хотите остаться в сеансе рабочего стола Lubuntu),
Соответствующий скриншот 9w
Рассматривали ли вы использовать резиновые USB-утки от Hak5 https://hakshop.com/collections/usb-rubber-ducky в режиме двойной утки. Я использовал их для установки Ubuntu на 7 машин. На каждом из них все, что мне нужно было сделать, это перезапустить системы с резиновой уткой, подключенной к USB-порту, поскольку мои системы всегда отдают приоритет загрузке с USB, это было легко. Но вы можете использовать две резиновые утки и использовать одну для настройки параметров BIOS и загрузки с USB, а другую - как флэш-накопитель Live Boot и клавиатуру для навигации по экрану настроек, создаваемому unetbootin
меню начальной загрузки. С небольшим количеством терпения и проб и ошибок вы можете сделать это. А так как техников на месте не требуется, вы можете отправить готовых резиновых уточек людям с физической близостью и доступом к системам.
В режиме Twin-Duck резиновая утка действует как HID (в нашем случае клавиатура) и запоминающее устройство USB. Так что вам нужно всего лишь сделать загрузочную флешку с unetbootin
на запоминающее устройство USB Mass Ducky и используйте функцию автоматизации HID (клавиатура) - ввод с клавиатуры - функциональность для автоматизации навигации (нажатия клавиш), необходимой при установке ОС. Вы даже можете сделать это на безголовых системах.