Pull to refresh

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

Reading time3 min
Views12K
Original author: Remy van Elst
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 <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 можно найти здесь.
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 29: ↑27 and ↓2+25
Comments22

Articles