Установите Ubuntu на картах флэш-памяти с интерфейсом USB автоматически

Я должен создать много карт флэш-памяти с интерфейсом USB, которые запускают Ubuntu. Эти флеш-накопители должны:

  1. содержите пользовательское предварительно установленное программное обеспечение
  2. будьте персистентными: даже после перезапуска, программы и новые файлы должны быть сохранены

Как я могу автоматизировать этот процесс для предотвращения ручных шагов (за исключением включения дисков)?


Одним подходом, о котором я думал, является Живая Настройка CD, но я не уверен - ли это правильный способ достигнуть (2).

Править: Ссылка, кажется, снижается временно, но Google имеет кэшируемый (сначала результат при поиске LiveCDCustomization).

0
задан 11 April 2020 в 16:56

2 ответа

По совету @ user535733 я сделал следующее:

1. Установите Ubuntu / Lubuntu на флэш-накопитель

Эти инструкции примерно соответствуют этому ответу .

(Подготовка)

  • Создайте Live USB или DVD.
  • Выключите и отсоедините компьютер.
  • Отключите все жесткие диски от компьютера.
  • Подключите компьютер снова.
  • Отключите безопасную загрузку и быструю загрузку в настройках UEFI (точные шаги для этого зависят от производителя)

(Запустить установщик)

  • Вставьте Live USB или Live DVD.
  • Запустите компьютер, USB / DVD должен загрузиться.
  • Выберите «Установить Ubuntu».
  • Вставьте новый целевой диск для установки Ubuntu.
  • Следуйте инструкциям.
  • Не устанавливайте «стороннее программное обеспечение», так как оно может не работать на других машинах.
  • В «Типе установки» выберите «Другое».
  • Выберите «Продолжить».
  • Выберите целевой диск (в моем случае / dev / sdb)
  • Выберите «Новая таблица разделов» и «Продолжить».

(Раздел EFI)

  • Щелкните «Свободное место» и «+».
  • «Размер»: 100 МБ
  • Выберите «Основной»
  • «Местоположение»: «Начало этого пространства»
  • «Использовать как»: «Системный раздел EFI»
  • Выберите «ОК»

(/ partition)

  • Щелкните «свободное место», а затем «+».
  • «Размер»: 7800 МБ (или что-то еще)
  • Выберите «Основной»
  • «Местоположение»: «Начало этого пространства»
  • «Использовать как»: «Ext4»
  • Точка монтирования : «/»
  • Выберите «ОК»

(Важно)

  • Убедитесь, что «Устройство для установки загрузчика» указывает на корень флеш-накопителя (в моем случае / dev / sdb).

  • Нажмите «Установить сейчас» и «Продолжить».

  • Следуйте инструкциям.
  • Дождитесь завершения установки.

(Завершение)

  • Выключите компьютер и подключите жесткий диск.

2. Сохраните полученный флеш-накопитель

Затем сохраните полученный образ на вашем компьютере. Я написал сценарий, который обрабатывает этот шаг.

#!/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

0
ответ дан 26 April 2020 в 17:35

Создайте сценарий, делающий все необходимые шаги, и выполните его после установки.

Например:

#!/bin/bash

set -e

apt update
apt install -y \
    vlc \
    curl \
    git \
    filezilla \
    ... others to be installed

apt purge -y \
    thunderbird \
    ... others to be uninstalled

gsettings set org.gnome.shell.extensions.desktop-icons show-trash false

apt upgrade -y
apt autoremove -y

Можно даже поместить сценарий где-нибудь онлайн и выполнить его через

wget -qO- https://example.com/script.sh | sudo bash
0
ответ дан 11 April 2020 в 22:28

Другие вопросы по тегам:

Похожие вопросы: