ostree_on_alt/acos-installer.sh

94 lines
2.9 KiB
Bash
Raw Permalink Normal View History

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