我有很多 14.04 信息亭系统,分布在半个国家。这些都是糟糕的小型集成设备。我需要将它们全部升级到 16.04 以支持新的软件堆栈。do-release-upgrade
一半时间有效。另一半时间会破坏安装。此外,CPU真的速度很慢,而且有些网站的网络连接也相当差。所以即使可以运行,升级也需要很长时间。
所以有了新计划。
我可以在 Virtualbox、LXC 或其他任何系统中为每个信息亭制作一个完全安装的系统映像。
我需要一种方法将这些图像解压到系统上。
这里的主要问题是另一端的技术人员非常少。我不想亲自飞 200 英里去做这件事。我需要一种几乎完全自动化且不需要键盘的东西。
我正在想象这样的场景:
- 我为每个信息亭制作一个系统图像
- 我为每个信息亭制作一个可启动的 USB 驱动器,并将信息亭图像复制到其中。
- 我给每张都贴上标签并张贴出来。
- 在另一端,具有 USB 端口物理访问权限的工作人员只需插入正确的驱动器并重新启动即可。
- 然后,其可引导元素将写入并扩展磁盘映像。
我要找的就是那个“可引导元素”。我原本以为类似的东西可能已经存在(用于批量重新映像安装),但我可能进入了新领域。任何无需手动干预(插入后)即可安装映像的东西都会获得积分。
据我所知,像 Clonezilla 这样的选项需要有人用键盘告诉它该做什么。我需要不需要键盘,直接打开就可以完成的东西。
答案1
Shell脚本
我很喜欢制作一个 bash shellscript,它可以在已安装的和持久的 Ubuntu 系统以及基于 Debian Jessie 的小型“9w”系统中自动执行其操作。我希望它对您以及将来的其他人都有用。
该脚本假定应该有两个可写驱动器(大容量存储设备)、活动驱动器和目标驱动器。不是使用 toram,它会破坏实时驱动器的识别。
shellscript 调用dus-live
,这是韓國. 因此它正在取代交互式 shellscript dus
。
dus-live
可以管理以下类型的源文件,
- 文件.iso
- 文件.img
- 文件.img.gz
- 文件.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
在持久实时系统中进行了测试
我测试了它在两个持久实时系统中的运行情况,它们可以从压缩映像文件安装,
请点击此链接查看有关此方法的更多详细信息,
自动启动
当将以下行附加到自动启动时,此脚本可以在 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
和 shellscript 的实际位置相匹配。
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的对应截图
答案2
您是否考虑过使用 Hak5 的 USB 橡皮鸭https://hakshop.com/collections/usb-rubber-ducky在双鸭模式下。我用它们在 7 台机器上安装了 Ubuntu。在每台机器上,我所要做的就是重新启动系统,将小黄鸭插入 USB 端口,因为我的系统始终优先从 USB 启动,所以这很容易。但您可以使用两个小黄鸭,用一个来调整 BIOS 首选项并从 USB 启动,同时使用另一个作为实时启动闪存驱动器和键盘来浏览启动unetbootin
安装菜单生成的设置启动画面。只要有一点耐心和反复试验,你就可以做到。而且由于不需要现场技术人员,您可以将准备好的小黄鸭邮寄给物理上接近并可以访问系统的人。
在 Twin-Duck 模式下,小黄鸭既可充当 HID(在我们的例子中是键盘),又可充当 USB 大容量存储设备。因此,您只需要在unetbootin
小黄鸭的 USB 大容量存储上制作一个可启动闪存盘,然后使用 HID(键盘)自动化 - 按键注入 - 功能来自动执行安装操作系统时所需的导航(按键)。您甚至可以在无头系统上执行此操作。