web-dev-qa-db-ja.com

ブート可能な無人USB復元ディスクを作成するにはどうすればよいですか?

全国に14.04のキオスクシステムがあります。これらは恐ろしい小さな統合デバイスです。新しいソフトウェアスタックをサポートするには、それらをすべて16.04にアップグレードする必要があります。 do-release-upgradeは半分の時間で機能します。残りの半分はインストールを破壊します。さらに、CPUは本当に遅く、一部のサイトのネットワーク接続もかなり見苦しいです。そのため、機能する場合でも、アップグレードには長い時間がかかります。

だから新しい計画。
Virtualbox、LXC、その他何でも、キオスクごとに完全にインストールされたシステムイメージを作成できます。
これらのイメージをシステムに展開する方法が必要です。

ここでの主な問題は、もう一方の端に利用可能な技術者が非常に少ないことです。そして、私はこれを自分で行うために200マイル飛ぶことはしたくない。ほぼ完全に自動化され、キーボードを必要としないものが必要です。

私は次のようなシナリオを想像しています:

  • キオスクごとにシステムイメージを作成します
  • キオスクごとに起動可能なUSBドライブを作成し、キオスクイメージにコピーします。
  • それぞれにラベルを付けて投稿します。
  • もう一方の端では、USBポートに物理的にアクセスできるスタッフメンバーが適切なドライブを接続して再起動するだけです。
  • これのブート可能要素は、ディスクイメージを書き込んで展開します。

私が探しているのは、その「起動可能な要素」です。私はこのような何かが既に存在するかもしれないと思っていました(バルク再インストールの場合)が、私は新しい領域にいる可能性があります。手動で干渉せずにイメージをインストールする(貼り付けて)ものはすべてポイントを取得します。

私の知る限り、Clonezillaのようなオプションを使用するには、キーボードを持っている人に何をすべきかを伝える必要があります。キーボードを必要とせず、ただ乗ってそれを行うものが必要です。

5
Oli

シェルスクリプト

私はbashシェルスクリプトの作成を楽しんでいます。これは、インストール済みのシステムやUbuntuの永続的なライブシステム、Debian Jessieベースの小さな「9w」システムで自動的に実行できます。これがあなただけでなく、将来他の人々にも役立つことを願っています。

このスクリプトは、2つの書き込み可能なドライブ(大容量記憶装置)、ライブドライブとターゲットドライブがあると想定しています。 toramをnot使用しないでください。ライブドライブの識別が損なわれます。

シェルスクリプトは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

永続的なライブシステムでテスト済み

圧縮されたイメージファイルからインストールできる2つの永続的なライブシステムで動作することをテストしました。

このリンクでこの方法の詳細を参照してください。

自動スタート

次のコマンドを使用して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ドライブまたはメモリカードにインストール)を作成する必要がある場合があります。少なくともインストールするシステムがMSDOSパーティションテーブルを使用している場合は、おそらくdus-liveを単純なddコマンドラインに置き換えることができます。

免責事項

このシェルスクリプトはかなり迅速に作成され、私がテストしたとおりに動作しますが、テストされていない多くのケースがあり、予期しないことが起こる可能性があります。そのため、貴重なデータを含むドライブが存在しない場所で上書きテストを行ってください。

スクリーンショット

Lubuntuの3つのスクリーンショット

最初の30秒間は、ホットキーの組み合わせctrl + Cを使用してオートクローンを停止できます。

enter image description here

コンソール出力:この段階では、システムは同期しています(バッファーをターゲットドライブにフラッシュ)、

enter image description here

30秒の間、ホットキーの組み合わせctrl + Cを使用して電源オフを回避できます(Lubuntuデスクトップセッションにとどまる場合)。

enter image description here

9wの対応するスクリーンショット

enter image description here

3
sudodus

Hak5のUSBラバーダッキーを使用することを検討しましたか? https://hakshop.com/collections/usb-rubber-ducky ツインダックモード。 Ubuntuを7台のマシンにインストールするために使用しました。私のシステムは常にUSBからの起動を優先するため、ゴム製のダッキーをUSBポートに差し込んでシステムを再起動するだけでした。これは簡単でした。しかし、2つのゴム製ダッキーを使用し、1つを使用してBIOS設定を調整し、USBから起動し、もう1つをunetbootinブートインストールメニューによって生成される設定スプラッシュ画面をナビゲートするライブブートフラッシュドライブおよびキーボードとして使用できます。少しの忍耐と試行錯誤でそれを行うことができます。また、現場の技術者は必要ないため、準備が整ったゴム製ダッキーを物理的に近く、システムにアクセスできる人に郵送できます。

Twin-Duckモードでは、ゴム製のダッキーはHID(この場合はキーボード)とUSB大容量記憶装置の両方として機能します。したがって、ラバーダッキーのUSB大容量ストレージにunetbootinのブータブルフラッシュディスクを作成し、OSのインストール中に必要なナビゲーション(キーストローク)を自動化するHID(キーボード)オートメーション-キーストロークインジェクション機能を使用するだけです。 。ヘッドレスシステムでもこれを行うことができます。

0
endrias