Я, почему-то, не принял во внимание ясные надписи серым по черному, и попытался распаковать полученный ramdisk, думая, будто бы это стандартный initrd. А почему? Да потому что внимательнее мануалы читать надо, и гуглить лучше, если сам чего-то не знаешь.
Оказывается, при создании дискеты была применена более старая технология создания диска в оперативной памяти
Полученный на прошлом этапе ramdisk.gz
оказался действительно виртуальным диском в оперативной памяти, сжатым gzip’ом
Правда, при распаковке в Линуксе, gzip выдал предупреждение:
Пытаемся распаковать ранее вырезанный ramdisk.gz
:
gzip -d ramdisk.gz
gzip: ramdisk.gz: decompression OK, trailing garbage ignored
Так, какой-то «мусор» после конца архива был игнорирован при распаковке. Как позже выяснится, фактически он ни на что не влияет, и на предупреждение gzip’а можно забить.
В конце образа дописано некоторое количество байт F6
(Ў) и нечто похожее на контрольную сумму и цифровую подпись.
Хотя, для чистоты эксперимента, ничто не мешает получить «чистый» архив, размером 876114 байт:
dd bs=1 count=876114 if=ramdisk.gz of=ramdiskcln.gz
И «мусорный» хвост (остаток размером 133614 байт).
dd bs=1 skip=876114 if=ramdisk.gz of=endimg
Пробую распаковать ramdiskcln.gz
— никаких предупреждений, распаковка успешна:
Доступ к ramdisk’у и его модификация
Сначала создается точка монтирования:
mkdir /mnt/ramzes
Теперь монтирование распакованного образа:
mount -o loop ramdiskcln /mnt/ramzes
Доступ у ФС ramdisk’а получен
Все успешно примонтировалось, видно структуру каталогов оригинального ramdisk’а AVP Z.E.S Linux. Места, правда, маловато. Всего 3 с хвостиком Мб, а осталось свободными вообще 806 К. Но все равно, кое-что можно сделать, например, для первого раза:
— выкинуть сам AVP (директория AVP
в opt
, скрипт avp.run
из sbin
, ссылку usr/bin/AVPLinux
и директорию .AVP
из root
)
— подправить скрипт etc/rc.d/rc.sysinit
, чтоб выкинуть команды вызова AVP
1. Отмонтируем ramdisk:
umount /mnt/ramzes
2. Запакуем образ ramdisk’а:
gzip -9 ramdiskcln
3. Соберем образ диска обратно. От предыдущих экспериментов должен остаться файл ldrkrnl.img, содержащий начальный загрузчик и ядро Z.E.S. Его нужно скопировать в директорию с измененным и запакованным ramdisk’ом, и просто слить в новый образ с помощью cat
:
ldrkrnl.img ramdiskcln.gz >mbootdisk.img
И все-таки попытку модификации исходного образа удалось завершить, хотя бы для демонстрации того, что «а так можно было?»
Например, в образ добавлен минималистичный текстовый редактор qed
, написанный на Free Pascal:
Или даже мощный консольный редактор, переделанный из примера, поставляющегося с Free Pascal:
—Размер ramdisk’а сильно ограничен, поэтому некоторый софт, даже статически скомпилированный, туда не влез. Либо нарушалась идея «чтоб влезло на одну дискету».
-Постоянные проблемы с shared-библиотеками даже у того, что влезло. Так понимаю, что какие-то библиотеки устарели настолько, что новое не запускается, а старое, если заменить библиотеки — не работает. Или я что-то неправильно делал.
Поигрались и хватит, все равно для практического применения этот дистрибьютив не совсем подходит. Но есть и плюсы — классно поковырялся, в процессе узнал новое, в общем, удовольствие получено. Осталось даже несколько идей на будущее, например, очень понравился Free Pascal и некоторые возможности Linux, реализуемые им без геморроя, которым страдает программер на C/C++.
Начало
Использование ramdisk в Linux (ramdisk, ramfs, tmpfs)
или препарирование рамдисков
How to Create/Modify an RAM disk Image (на английском), PDF, скачать
Оригинальный образ bootdisk.img