- PVSM.RU - https://www.pvsm.ru -

Загружаемся в Vim или Vim c PID 1

Boot to Vim (окно загрузки)

Это ответ на отличную статью от Pascal Bourguignon, в которой он рассказывает о том, как запустить Emacs с PID 1 [1].

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

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

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

Это, действительно, достаточно просто. Скомпилируйте Vim статически, установите init= для загрузки, и все готово.

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

Собираем Vim

Пожалуйста, следуйте другому моему руководству про то как собрать статически слинкованный Vim [3]. В результате вы получите исполняемый файл, который мы будем использовать далее в этом руководстве.

Подготовка

Вам понадобится несколько инструментов, чтобы собрать 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 <Enter> 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 можно найти здесь [4].

Автор: Myshov

Источник [5]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/vim/69861

Ссылки в тексте:

[1] как запустить Emacs с PID 1: http://www.informatimago.com/linux/emacs-on-user-mode-linux.html

[2] Tiny Core, Core edition: http://distro.ibiblio.org/tinycorelinux/

[3] как собрать статически слинкованный Vim: https://raymii.org/s/blog/Statically_cross_compiled_vim_for_x86_x86-64_and_mips.html

[4] здесь: http://wiki.tinycorelinux.net/wiki:remastering

[5] Источник: http://habrahabr.ru/post/237213/