Завантажуємося в 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 < Enter > to begin or F2, F3 або 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 можна знайти на тут.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.