94 lines
2.9 KiB
Bash
Executable File
94 lines
2.9 KiB
Bash
Executable File
#!/bin/sh
|
||
set -e
|
||
|
||
if [ -z "$2" ]
|
||
then
|
||
echo "Справка: $0 <устройство для установки> <конфигурационный файл ignition>"
|
||
echo "Пример: $0 /dev/sda config.ign"
|
||
exit 1
|
||
fi
|
||
|
||
DEVICE=$1
|
||
IGNITION_CONFIG=$2
|
||
BRANCH=alt/x86_64/containeros/stable
|
||
OS_NAME=alt-containeros
|
||
MOUNT_DIR=/tmp/acos
|
||
REPO_LOCAL=$MOUNT_DIR/ostree/repo
|
||
|
||
if [ ! -b $DEVICE ]
|
||
then
|
||
echo "Первый параметр должен быть именем блочного устройства"
|
||
exit 1
|
||
fi
|
||
|
||
if [ ! -f $IGNITION_CONFIG ]
|
||
then
|
||
echo "Второй параметр должен быть именем существующего файла"
|
||
exit 1
|
||
fi
|
||
|
||
if [ `id -u` -ne 0 ]
|
||
then
|
||
echo "Запуск скрипта $0 возможет только от пользователя root (uid=0)"
|
||
exit 1
|
||
fi
|
||
|
||
set +e
|
||
mount|grep ^$DEVICE
|
||
if [ "$?" -eq 0 ]
|
||
then
|
||
echo "Диск, на который выполняется установка, должен быть непримонтированным"
|
||
exit 1
|
||
fi
|
||
set -e
|
||
|
||
parted $DEVICE print
|
||
if [ "$?" -ne 0 ]
|
||
then
|
||
exit 1
|
||
fi
|
||
|
||
read -p "Вы уверены, что хотите установить ACOS на данный диск (y/n)? " -n 1 -r
|
||
echo
|
||
if [[ ! $REPLY =~ ^[Yy]$ ]]
|
||
then
|
||
exit 1
|
||
fi
|
||
|
||
#На диске, на который выполняется установка создать файловую систему. Метка boot нужна для поиска раздела в ignition.
|
||
dd if=/dev/zero of=$DEVICE bs=1M count=3
|
||
parted $DEVICE mktable msdos 2>&1 | grep -v /etc/fstab
|
||
parted -a optimal $DEVICE mkpart primary ext4 2MIB 100% 2>&1 | grep -v /etc/fstab
|
||
parted $DEVICE set 1 boot on 2>&1 | grep -v /etc/fstab
|
||
mkfs.ext4 -L boot "$DEVICE"1
|
||
mkdir $MOUNT_DIR
|
||
mount "$DEVICE"1 $MOUNT_DIR
|
||
|
||
tar xf acos_root.tar.xz -C $MOUNT_DIR
|
||
|
||
grub-install --root-directory=$MOUNT_DIR $DEVICE
|
||
ln -s ../loader/grub.cfg $MOUNT_DIR/boot/grub/grub.cfg
|
||
|
||
ostree config --repo $REPO_LOCAL set sysroot.bootloader grub2
|
||
ostree refs --repo $REPO_LOCAL --create alt:$BRANCH $BRANCH
|
||
ostree admin os-init $OS_NAME --sysroot $MOUNT_DIR
|
||
OSTREE_BOOT_PARTITION="/boot" ostree admin deploy alt:$BRANCH --sysroot $MOUNT_DIR --os $OS_NAME \
|
||
--karg-append=ignition.platform.id=metal --karg-append=\$ignition_firstboot \
|
||
--karg-append=net.ifnames=0 --karg-append=biosdevname=0 \
|
||
--karg-append=quiet --karg-append=root=UUID=`blkid --match-tag UUID -o value "$DEVICE"1`
|
||
|
||
rm -rf $MOUNT_DIR/ostree/deploy/$OS_NAME/var
|
||
tar xf var.tar.xz -C $MOUNT_DIR/ostree/deploy/$OS_NAME/
|
||
touch $MOUNT_DIR/ostree/deploy/$OS_NAME/var/.ostree-selabeled
|
||
|
||
#Создать конфигурационные файлы ignition
|
||
mkdir $MOUNT_DIR/ignition
|
||
cp $IGNITION_CONFIG $MOUNT_DIR/ignition/config.ign
|
||
touch $MOUNT_DIR/boot/ignition.firstboot
|
||
|
||
#Установить пароль рута в новой системе
|
||
echo
|
||
echo
|
||
echo
|
||
chroot $MOUNT_DIR/ostree/boot.1/$OS_NAME/*/0/ passwd
|