1. 플래시 드라이브에 Ubuntu/Lubuntu 설치

1. 플래시 드라이브에 Ubuntu/Lubuntu 설치

저는 Python 프로그램을 개발 중이며내 프로그램을 실행하는 부팅 가능한 USB 스틱.

필요하다:

  1. USB 스틱은 Linux를 실행해야 하며 일부 표준 종속성(LAN/WLAN 액세스, GUI, 연결)을 포함해야 합니다.영사기)
  2. 내 프로그램(데이터베이스, 일부 Python 종속성 등)에 대한 종속성을 설치할 수 있어야 합니다.
  3. 수동 설정을 피하고 싶습니다. 프로그램, 종속성 및 필수 드라이버를 포함하여 USB 스틱을 생성하는 스크립트가 필요합니다(이상적으로는도커)

무엇인가요가장 단순한이 목표를 달성하는 방법은 무엇입니까?


나는부팅 가능한 우분투내 프로그램과 모든 종속성을 수동으로 설치합니다. 이렇게 하면 1-2는 해결되지만 3은 해결되지 않습니다. 부팅 가능한 Ubuntu를 자동으로 사용자 정의하는 것은 쉽지 않은 것 같습니다...

답변1

이 방법은 효과가 있을 것이며 매우 간단하다고 생각합니다.

  • 만들다끈질기게 살아라이 도구를 사용하여 Ubuntu iso 파일에서 드라이브mkusbu.

  • 그런 다음 필요한 도구를 설치하고 조정하십시오.

  • 그런 다음 드라이브 이미지를 생성할 수 있습니다.

  • 마지막으로 이미지에서 다른 USB 드라이브(최소 원본 시스템의 USB 드라이브 크기 이상)로 복제합니다. 이러한 복제된 드라이브를 시스템의 최종 사용자에게 배포할 수 있습니다.

    또한 최종 사용자가 이미지의 압축 버전을 다운로드하여 자신의 USB 드라이브에 추출할 수 있습니다. mkusb는 gzip(더 빠른) 및 (더 나은 압축) 압축을 사용하여 압축된 이미지 에서 직접 이 작업을 수행할 수 있지만 xz필요한 경우 Windows에서 다른 도구를 사용하여 수행할 수도 있습니다.

답변2

다음의 도움을 사용하세요.아쿠벤투, 나는 다음을 생각해낼 수 있었다우분투 특정 솔루션이것은 나에게 효과적입니다.

1. 플래시 드라이브에 Ubuntu/Lubuntu 설치

이 지침은 대략 다음과 같습니다이 답변.

(준비하다)

  • 라이브 USB 또는 DVD를 만듭니다.
  • 컴퓨터를 끄고 플러그를 뽑습니다.
  • 컴퓨터에서 모든 하드 드라이브를 분리합니다.
  • 컴퓨터에 다시 연결하십시오.
  • UEFI 설정에서 보안 부팅 및 빠른 부팅을 비활성화합니다(정확한 단계는 공급업체에 따라 다름).

(설치 프로그램을 실행하세요)

  • Live USB 또는 Live DVD를 삽입합니다.
  • 컴퓨터를 시작하면 USB/DVD가 부팅됩니다.
  • Ubuntu 설치를 선택합니다.
  • Ubuntu를 설치하려면 새 대상 드라이브를 삽입하세요.
  • 지시를 따르다.
  • 다른 컴퓨터에서는 작동하지 않을 수 있으므로 "타사 소프트웨어"를 설치하지 마십시오.
  • "설치 유형"에서 "기타"를 선택합니다.
  • 계속을 선택합니다.
  • 대상 드라이브를 선택합니다(제 경우에는 /dev/sdb).
  • "새 파티션 테이블"과 "계속"을 선택합니다.

(EFI 파티션)

  • "사용 가능한 공간" 및 "+"를 클릭합니다.
  • "크기": 100MB
  • "기본"을 선택하세요
  • "위치": "이 공간의 시작"
  • "다음으로 사용됨": "EFI 시스템 파티션"
  • 확인을 선택하세요

(/ 나뉘다)

  • "사용 가능한 공간"을 클릭한 다음 "+"를 클릭합니다.
  • "크기": 7800MB(또는 기타)
  • "기본"을 선택하세요
  • "위치": "이 공간의 시작"
  • "다음으로 사용됨": "Ext4"
  • 마운트 지점: "/"
  • 확인을 선택하세요

(중요한)

  • "부트로더 설치용 장치"가 플래시 드라이브의 루트(제 경우에는 /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

관련 정보