私はPythonプログラムを開発しています私のプログラムを実行する起動可能なUSBスティック。
必要:
- USBスティックはLinuxを実行し、いくつかの標準依存関係(LAN / WLANアクセス、GUI、接続)を含める必要があります。プロジェクター)
- 私のプログラム(データベース、いくつかのPython依存関係など)に依存関係をインストールできるはずです。
- 手動設定を避けたい。プログラム、依存関係、必須ドライバを含むUSBスティックを生成するスクリプトが必要です(理想的にはドッカー)
何ですか最も単純なこの目標を達成する方法は?
私起動可能なUbuntu私のプログラムとすべての依存関係を手動でインストールします。これにより、1-2は解決されますが、3は解決されません。起動可能なUbuntuを自動的にカスタマイズするのは簡単ではないようです。
答え1
この方法は効果があり、非常に簡単だと思います。
作るしつこく生きるこのツールを使用してUbuntu isoファイルからドライブmkusbu。
次に、必要なツールをインストールして調整します。
その後、ドライブイメージを作成できます。
最後に、イメージから別のUSBドライブ(最小ソースシステムのUSBドライブサイズ以上)に複製します。これらのクローンドライブをシステムのエンドユーザーに配布できます。
また、エンドユーザーは画像の圧縮バージョンをダウンロードして自分のUSBドライブに取り出すことができます。 mkusbは、
gzip
(より速い)圧縮と(より良い圧縮)圧縮を使用して圧縮画像から直接これを実行できますが、必要に応じてWindows上の他のツールを使用してxz
実行することもできます。
答え2
次の助けを借りてください。アクベント、私は次のことを思い出すことができたUbuntu固有のソリューションこれは私にとって効果的です。
1. フラッシュドライブへのUbuntu/Lubuntuの取り付け
このガイドラインはおおよそ次のとおりです。この回答。
(準備する)
- ライブUSBまたはDVDを作成します。
- コンピュータの電源を切り、プラグを抜きます。
- コンピュータからすべてのハードドライブを取り外します。
- コンピュータに再接続します。
- UEFI設定でセキュアブートとクイックブートを無効にします(正確な手順はベンダーによって異なります)。
(インストールプログラムを実行してください)
- Live USBまたはLive DVDを挿入します。
- コンピュータを起動するとUSB / DVDが起動します。
- Ubuntuのインストールを選択します。
- Ubuntuをインストールするには、新しいターゲットドライブを挿入してください。
- 指示に従ってください。
- 他のコンピュータでは動作しない可能性があるため、「サードパーティ製ソフトウェア」をインストールしないでください。
- 「インストールの種類」で「その他」を選択します。
- 続行を選択します。
- ターゲットドライブを選択します(私の場合は/ dev / sdb)。
- 「新しいパーティションテーブル」と「続行」を選択します。
(EFIパーティション)
- 「利用可能なスペース」と「+」をクリックします。
- 「サイズ」:100MB
- 「基本」を選択してください
- 「場所」:「この空間の始まり」
- 「次に使用する」:「EFIシステムパーティション」
- OKを選択してください
(/分割)
- 「利用可能なスペース」をクリックし、「+」をクリックします。
- 「サイズ」:7800MB(またはその他)
- 「基本」を選択してください
- 「場所」:「この空間の始まり」
- "次に使用": "Ext4"
- マウントポイント:「/」
- OKを選択してください
(重要)
「ブートローダインストール用デバイス」がフラッシュドライブのルート(私の場合は/ dev / sdb)を指していることを確認してください。
今すぐインストールして[続行]をクリックします。
- 指示に従ってください。
- インストールが完了するまで待ちます。
(仕上げ)
- コンピュータの電源を切り、ハードドライブを挿入します。
2. 作成した USB ディスクを保存します。
次に、結果の画像をコンピュータに保存します。この手順を処理するスクリプトを作成しました。
#!/bin/bash
#
# Saves flash drive partitions to disk
#
# Example Usage:
# ./copy.sh /dev/sde ./images
# enable bash strict mode
# http://redsymbol.net/articles/unofficial-bash-strict-mode/
set -euo pipefail
IFS=$'\n\t'
##########
# INPUTS #
##########
# Checking inputs
if [ $# -ne 2 ]; then
echo "USAGE: ./copy.sh DEVICE OUTPUTDIR"
echo "Available devices:"
sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL,UUID,MODEL
exit
fi
# parse inputs
DEVICE=$1
OUTPUTDIR=$2
EFIFILE=$OUTPUTDIR/ubuntu-efi.img
ROOTFILE=$OUTPUTDIR/ubuntu-root.img
PARTITIONFILE=$OUTPUTDIR/partitions.txt
# Display helpful information
echo "Saving device $DEVICE to $OUTPUTDIR:"
sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL,UUID,MODEL $DEVICE
# Confirm
read -r -p "Continue? [y/N] " response
if [[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]]; then
echo "Start copying (this could take a long time)..."
else
echo "Aborting" >&2
exit
fi
mkdir -p "$OUTPUTDIR"
########
# SAVE #
########
# record sizes
sudo fdisk -l | grep ${DEVICE} | sed "s#${DEVICE}#/dev/sdX#g" > $PARTITIONFILE
# dd: copy and convert
# if: source disk
# bs: sector size value from fdisk output
# count: last "end" sector from fdisk output incremented by one
# conv=sync,noerror: sync I/O and don't stop in case of errors on the source disk
sudo dd if=${DEVICE}1 conv=sync,noerror of=$EFIFILE
sudo dd if=${DEVICE}2 conv=sync,noerror of=$ROOTFILE
3. 新しいドライブに取り付ける
最後に保存した画像を新しいフラッシュドライブに取り付けます。今回もこのステップを処理するスクリプトを作成しました。
#!/bin/bash
#
# Installs Ubuntu/Lubuntu to flash drive
#
# Example Usage:
# ./copy.sh /dev/sde ./images
###########
# HELPERS #
###########
# enable bash strict mode
# http://redsymbol.net/articles/unofficial-bash-strict-mode/
set -euo pipefail
IFS=$'\n\t'
# directory containing this script
BASEDIR="$( dirname "$0")"
# run commands at the end of the script (even on errors)
EXIT=""
function addExit {
# call the argument before ending the script
EXIT="$@ ; $EXIT"
trap "echo 'Final tasks before exit...' ; $EXIT" EXIT HUP TERM INT QUIT
}
##########
# INPUTS #
##########
# Checking inputs
if [ $# -ne 2 ]; then
echo "USAGE: ./copy.sh DEVICE SOURCEDIR"
echo "Available devices:"
sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL,UUID,MODEL
exit
fi
# parse inputs
DEVICE="$1"
SOURCEDIR="$2"
MNT=/mnt
# Display helpful information
echo "Installing to device $DEVICE:"
sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL,UUID,MODEL $DEVICE
# Confirm
read -r -p "Continue? [y/N] " response
if [[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]]; then
echo "Preparing partitions..."
else
echo "Aborting" >&2
exit
fi
# record sizes
PARTITIONFILE="$SOURCEDIR/partitions.txt"
EFISTART=$( cat "$PARTITIONFILE" | grep /dev/sdX1 | awk -F" " '{ print $2 }')
EFIEND=$( cat "$PARTITIONFILE" | grep /dev/sdX1 | awk -F" " '{ print $3 }')
ROOTSTART=$(cat "$PARTITIONFILE" | grep /dev/sdX2 | awk -F" " '{ print $2 }')
ROOTEND=$( cat "$PARTITIONFILE" | grep /dev/sdX2 | awk -F" " '{ print $3 }')
#######################
# COPY TO FLASH DRIVE #
#######################
# umount all paritions of this device
echo "Unmounting all partitions of $DEVICE..."
sudo umount $DEVICE?* || true
# create partition table
sudo wipefs --all $DEVICE
sudo parted $DEVICE mklabel gpt
# efi partition
sudo parted $DEVICE mkpart primary fat32 ${EFISTART}s ${EFIEND}s
sudo parted $DEVICE set 1 boot on
sudo parted $DEVICE set 1 esp on
echo "Start copying efi..."
EFIFILE="$SOURCEDIR/ubuntu-efi.img"
sudo dd if="$EFIFILE" of=${DEVICE}1
# root partition
sudo parted $DEVICE mkpart primary ext4 ${ROOTSTART}s ${ROOTEND}s
# sudo parted $DEVICE name 2 UbuntuUSB
echo "Start copying root (this could take a long time)..."
ROOTFILE="$SOURCEDIR/ubuntu-root.img"
sudo dd if="$ROOTFILE" of=${DEVICE}2
##################
# PREPARE CHROOT #
##################
# prepare running command in root directory of new installation
sudo mount ${DEVICE}2 $MNT
addExit "sudo umount $MNT"
sudo mount ${DEVICE}1 $MNT/boot/efi
addExit "sudo umount $MNT/boot/efi"
for i in /dev /dev/pts /proc /sys; do
sudo mount -B $i ${MNT}$i
addExit "sudo umount ${MNT}$i"
done
sudo cp /etc/resolv.conf $MNT/etc/
modprobe efivars
########
# GRUB #
########
# update grub
sudo chroot $MNT grub-install -d /usr/lib/grub/x86_64-efi --efi-directory=/boot/efi/ --removable ${DEVICE}
#############
# CUSTOMIZE #
#############
# prepare scripts
sudo cp -r "${BASEDIR}/customize" "$MNT/opt/customize"
# install software
sudo chroot $MNT "/opt/customize/software.sh"
スクリプトは、次のスクリプトを使用して他のカスタムソフトウェアもインストールします。./customize/software.sh
#!/bin/bash
# enable bash strict mode
# http://redsymbol.net/articles/unofficial-bash-strict-mode/
set -euo pipefail
IFS=$'\n\t'
###########
# PREPARE #
###########
# avoid locale issues and in order to import GPG keys
export HOME=/root
export LC_ALL=C
#######
# APT #
#######
apt-get update -y
apt-get clean
apt-get -y autoremove --purge
####################
# INSTALL SOFTWARE #
####################
# -y: auto-confirm
# -qq: quiet installation
apt-get install -y -qq \
htop \
gparted \
build-essential