[Перевод] Загружаемся в Vim или Vim c PID 1

Boot to Vim (окно загрузки)Это ответ на отличную статью от Pascal Bourguignon, в которой он рассказывает о том, как запустить Emacs с PID 1.

Как мы все знаем, никто не использует Emacs.

Предложение выше как бы намекает, что это начало очередной священной войны. Пожалуйста, начинайте. Если вам хочется что-то мне сообщить, все мои контакты у меня в блоге.

На самом деле, шутки в сторону. Я считаю, что это отличная статья, и после прочтения мне захотелось посмотреть, смогу ли я сделать что-то похожее с Vim. Не в пользовательском режиме Linux, но в действительности создав ISO для загрузки. Можно сказать, «загрузиться в Vim», если вам так хочется.Это, действительно, достаточно просто. Скомпилируйте Vim статически, установите init= для загрузки, и все готово.

Мы будем использовать маленький (9Mb) дистрибутив Tiny Core, Core edition и настроим его так, чтобы загрузка шла прямо в наш статически собранный Vim.

Собираем VimПожалуйста, следуйте другому моему руководству про то как собрать статически слинкованный Vim. В результате вы получите исполняемый файл, который мы будем использовать далее в этом руководстве.Подготовка Вам понадобится несколько инструментов, чтобы собрать ISO, а именно cpio, tar, gzip, advdef и mkisofs. Их, скорее всего, можно установить с помощью вашего пакетного менеджера, если они еще не установлены. Пожалуйста, сделайте это для начала.Сначала создадим директорию для построения:

mkdir vim-as-pid-1 cd vim-as-pid-1 Также создадим пару директорий для построения ISO:

mkdir /tmp/isomount mkdir extract Скачиваем последнюю версию Tiny Core, Core edition (без GUI):

wget http://distro.ibiblio.org/tinycorelinux/5.x/x86/release/Core-current.iso Копируем файлы из скаченного ISO:

mount Core-current.iso /tmp/isomount/ -o loop, ro cp -a /tmp/isomount/boot /tmp/ Эти команды создадут директорию /tmp/boot с загрузчиком и файлом core.gz. Не забудьте его размонтировать:

umount /tmp/isomount Мы будем использовать директорию /tmp/boot далее, когда будем все собирать вместе в ISO-файл.

Изменение ISO-файла Переходим в директорию, куда будет извлечен core.gz — корневая директория файловой системы:

cd extract Используем zcat и cpio, чтобы извлечь корень файловой системы из core.gz:

zcat /tmp/boot/core.gz | cpio -i -H newc -d У нас теперь есть извлеченная корневая директория файловой системы:

# ls bin dev etc home init lib linuxrc mnt opt proc root run sbin sys tmp usr var Поместите скомпилированный на предыдущем шагу исполняемый файл Vim в директорию bin/

cp ~/vim bin/ Вы также можете сделать еще разные настройки, например, отредактировать сообщение загрузчика. Он находится в файле с именем boot.msg в директории /tmp/boot/isolinux/:

# vim /tmp/boot/isolinux/boot.msg ^L _ ( — Boot to Vim //\ Vim as Pid 1, because Awesome! v_/_ https://raymii.org/

Press to begin or F2, F3, or F4 to view boot options. Изменение inittab Для загрузки прямо в Vim, нам надо поменять конфигурацию инициализации. Отредактируем следующий файл:

vim etc/inittab Меняем эти строки:

:: sysinit:/etc/init.d/rcS tty1:: respawn:/sbin/getty 38400 tty1 на:

:: sysinit:/bin/vim tty1:: respawn:/bin/vim Собираем новенький ISO Убедимся, что мы все еще находимся в директории с именем extract. Далее пустим в дело следующую команду для построения нового файла tinycore.gz, который наш ISO будет использовать как initramfs: find | cpio -o -H newc | gzip -2 > …/tinycore.gz Копируем его в файл с названием core.gz в директорию /tmp/boot, которую мы скопировали ранее:

cp …/tinycore.gz /tmp/boot/core.gz Создаем новую директорию для файлов, которые будут находиться в новом ISO:

mkdir /tmp/newiso Копируем в нее директорию /tmp/boot:

cp -a /tmp/boot /tmp/newiso/ Собираем ISO, используя mkisofs:

cd /tmp/ mkisofs -l -J -R -V Boot_To_Vim -no-emul-boot -boot-load-size 4 -boot-info-table -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -o Boot_to_Vim.iso newiso Теперь у вас в /tmp есть файл с названием Boot_to_Vim.iso:

ls -la /tmp/Boot_to_Vim.iso -rw-r--r-- 1 root root 11044864 Sep 17 08:05 /tmp/Boot_to_Vim.iso Вы можете использовать его для загрузки в виртуальной машине или для прожига на диск. Если вы выйдете из Vim, он запустится снова.

Boot to Vim

Вы можете вызвать настоящий shell, набрав :! sh в командном режиме. Для выключения используйте команду :! halt.

Больше информации по ремастерингу Tiny Core можно найти здесь.

© Habrahabr.ru