LINUX.ORG.RU

Хочу свой арчинсталлер

 ,


1

1

Хочу простенький скриптик для быстрого развертывания системы на аварийный случай. Основная проблема в том, что скрипт доходит до arch-chroot /mnt и все, дальнейшие команды не отрабатывают. Тут кто как выходит из положения: разбивают установочный скрипт на до и после chroot; или делают что-то вроде arch-chroot /mnt sh -c 'locale-gen'.

Вопрос: как все это уместить в одном скрипте и максимально лаконично?

Перемещено hobbit из general

Ответ на: комментарий от usi_svobodi

Да, например, локали настраиваю:

echo "ru_RU.UTF-8 UTF-8" > /etc/locale.gen
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen

И еще кучку первоначальных настроек.

Electro_Kot
() автор топика

Скриптами разворачиваются многие дистрибутивы, и везде используется chroot. Тебя это не наталкивает на какие-то мысли?

alex1101
()
Ответ на: комментарий от krasnh

Я преимущественно общаюсь примитивной речью, чтобы окружающие меня понимали. Так вот: ты не понял. Вывод сделай сам.

Electro_Kot
() автор топика
Ответ на: комментарий от Electro_Kot

почти все можно сделать без чрута.

но ты можешь упороться и завернуть команды для установки в функции и при запуске скрипта вызывать нужные функции.

usi_svobodi
()

Не знаю, насколько это локанично, но можно действовать «в лоб». Идея - поместить нужный скрипт в /mnt и запускать arch-chroot /mnt /myscript.sh
Если всё это одним скриптом, то я бы скопировал нужные строки из основного скрипта в скрипт в /mnt дал бы ему chmod +x и запустил командой выше. Выглядеть это могло бы как-то так:

#!/bin/bash
echo 1
echo 2
echo '#!/bin/bash' > /mnt/myscript.sh
tail -2 $0 >> /mnt/myscript.sh
echo >> /mnt/myscript.sh
chmod +x /mnt/myscript.sh
arch-chroot /mnt /myscript.sh
exit 0
echo 3
echo 4

надеюсь, идея понятна

lnx
()
Ответ на: комментарий от lnx

Более лаконичное решение с переносом строк из основного скрипта в chroot без использования tail:

#!/bin/bash
#команды основного скрипта
echo 1
echo 2

#все строки до EOF будут записаны в  /mnt/myscript.sh
cat << EOF > /mnt/myscript.sh
#!/bin/bash
echo 3
echo 4
EOF

chmod +x /mnt/myscript.sh
arch-chroot /mnt /myscript.sh

Можно переменными задать имя скрипта, путь chroot, использовать их в параметрах скрипта и т.д.

lnx
()
Последнее исправление: lnx (всего исправлений: 1)

До чего-то можно дотянуться через /mnt, как например:

sed -s 's/^#GRUB_ENABLE_CRYPTODISK=y/GRUB_ENABLE_CRYPTODISK=y/g' -i /mnt/etc/default/grub

До всего остального проще вызывать похожую конструкцию:

artix-chroot /mnt sh -c 'grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub /dev/vda --recheck'

И с этим особо ничего не сделаешь…

Electro_Kot
() автор топика

А что тут думать-то?

#!/bin/bash

die() { echo "$*" >&2; exit 1; }

if [[ "${1+set}" == "" ]]; then

	... команды вне чрута

	install -m755 "$BASH_SOURCE" /path/to/chroot/install.sh
	cleanup() { rm -f "/path/to/chroot/install.sh"; }
	trap cleanup EXIT
	
	chroot /path/to/chroot /install.sh stage2

elif [[ "$1" == stage2 ]]; then

	... команды в чруте 

else
	die "Bad argument: $1"
fi
intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от Electro_Kot

Вообще-то не понял именно ты. Суть его предложения в том, что вместо того чтобы просто написать команды, что нужно вводить внутри chroot, запускать последней командой из первого скрипта скрипт изнутри chroot, тогда это будет работать.

Vsevolod-linuxoid ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.