Этот способ несколько сложнее, но ненамного.
Что сделаем:
1. Пересоберем ядро с поддержкой криптографии
2. Встроим tcplay в основную систему, т.е. после наших манипуляций он будет доступен «из коробки»
Преимущества:
— Не надо больше ничего делать
Недостатки:
— Способ требует больше движений
Если мы скомпилируем ядро без патча UnionFS, то при запуске операционной системы мы получим примерно такую картинку:
1. Исходники ядра, которые можно взять здесь
2. Патч для поддержки UnionFS для новой версии ядра
3. Комплект разработчика, для соответствующей версии Puppy Linux, если мы будем собирать ядро в ней, или же «большой» Linux, в котором есть все нужные инструменты. (см. предыдущую заметку )
4. Комплект для работы со SquashFS, чтоб разобрать основной файл Puppy Linux Slacko, добавить туда, что нам надо, собрать обратно и оттестировать. Я на «большом» Линуксе просто скачал
squashfs-tools-4.2
через sbopkg
, но кому мало ли надо, вот оф. сайтВнимание! Если собирать ядро в Puppy, то следует делать это на внешнем разделе, на котором имеется достаточно места, не следует собирать ядро в стандартных директориях, изменения в которых сохраняются в персональный файл. В противном случае место в файле сохранения и оперативная память быстро кончатся и процесс может до конца и не дойти.
Я собирал новое ядро для Puppy в «большом» линуксе.
1. Распакуем исходники ядра в отдельную директорию.
2. Скопируем в эту директорию патч для поддержки UnionFS
3. Распакуем его командой
gunzip unionfs-2.6_for_3.2.62.diff.gz
4. Применим патч
patch -p1 -i <имя файла заплатки>
т.е. для нашего случаяpatch -p1 -i unionfs-2.6_for_3.2.62.diff
Вообще это самый большой, больной и неоднозначный вопрос при сборке ядра, посему тут мне придется отослать читателя к более подробному и обстоятельному материалу, ссылки на который будут в конце заметки.
Я же остановлюсь только на некоторых моментах, которые непосредственно важны для нашей задачи.
Итак, у меня имелся в наличии готовый конфиг (который можно скачать здесь), и я подправил в нем только некоторые моменты
Во-первых, копируем файл
.config
в директорию с исходниками ядра.Во-вторых, открываем в любом удобном текстовом редакторе файл
Makefile
, находящийся в директории с исходниками, ищем в нем 4 строчку сверху: EXTRAVERSION=
и дописываем туда, что-нибудь типа -pcry
(Puppy с поддержкой криптографии). Эта настройка добавит к имени ядра соответствующий постфикс, и кто-нибудь, случайно скачавший мое изделие, будет знать, что ядро не нативное, и возможно в нем работает криптография, но что-нибудь другое важное отвалилось :))Наконец, запускаем конфигурирование командой
make menuconfig
Далее идем в раздел Cryptographic API и устанавливаем переключатели так, как это указано на нижеследующих картинках.1 2 3
Далее идем в File systems и обязательно включаем в ядро поддержку Ext2, Ext3 и Ext4 файловых систем
В разделе File systems ищем подраздел Miscellaneous filesystems, заходим в него и проверяем, чтобы Union file system, был встроен в ядро <*>, а также проверяем, что в ядро встроена SquashFS 4.0
1 2 3
В директории с исходниками запускаем команду
make bzImage
И идем пить чай, или водку. Возможно, с учетом скорости работы компьютера, и из самовара.Далее собираем модули
make modules
И опять идем пить из самовараНа сборку ядра на селероне с 2.2 ггц тактовой частоты и 1 Гб оперативной памяти ушло 15 минут, а модули собирались час.
Внимание! Операции по подготовке ОС, разборке главного файла, его сборке и внедрению новых программ лучше выполнять из под root, чтоб не слетели права на некоторые системные файлы. Команды
make modules_install
и make install
также выполняются с правами root1.Сначала разбираем основной файл slacko 5.5. —
puppy_slacko5.5.sfs
2.Качаем необходимые пакеты LVM2, tcplay и Multipath tools. Ссылки здесь
3.Распаковываем пакеты, каждый в отдельную директорию
4. Копируем файл
puppy_slacko_5.5.sfs
в отдельную директорию, и, что называется, разбираем на запчасти, точнее распаковываем.
unsquashfs puppy_slacko_5.5.sfs
Образуется директория
squashfs-root
с содержимым sfs-файла5.Теперь соберем все модули в одну кучу, на «большом» Линуксе это проблемы не представляет, а вот на Puppy должно хватить места в файле сохранения.
Переходим в каталог с исходниками ядра и выполняем команду
make modules_install
Если вы работаете не через удаленный терминал, то направьте вывод команды в текстовый файл:, например
make modules_install >/mnt/sdb1/kernel/ok/out.txt
6.Создаем отдельный каталог (что-нибудь типа
/mnt/sdb1/kernel/ok
), в нем подкаталог lib
, а в подкаталоге lib
подкаталог modules
и копируем в него каталог 3.2.62-pcry
из /lib/modules
Дальше идет небольшой геморрой, надо скопировать все собранные Firmware-модули. Что это такое, можно прочитать, например тут. Поскольку я делал все манипуляции на удаленном компьютере через терминал, я просто скопировал из окна терминала нужные мне данные (они есть в выводе команды
make modules_install
) и написал 2 скрипта, облегчающих мне работу.Нужная мне часть из вывода команды
Первый создает в моем рабочем каталоге нужную мне структуру подкаталогов (запускается в
/mnt/sdb1/kernel/ok/lib/firmware
), а второй копирует нужные файлы.7. Подготавливаем новый sfs-файл, в директорию
squashfs-root
копируем (далее все пути относительно squashfs-root
)-Директорию
3.2.62-pcry
в lib/modules
(и удаляем из lib/modules 3.2.33-4g
)-Директорию
firmware
в lib
и при необходимости заменяем нужные файлы-Из распакованных пакетов копируем в корень
squashfs-root
все директории со всеми файлами, кроме директорий install
-Создаем в каталоге
squashfs-root
3 скрипта 1 2 3, это doinst-скрипты, можно скопировать их из директорий install
соответствующих пакетов, им нужно поставить права на исполнение и выполнить, после чего их можно удалить.8. Выходим из
squashfs-root
и собираем основной файл Puppy Linuxsquashfs-root puppy_slacko_5.5.sfs
Установка нового ядра и главного файла
1. Делаем копию
puppy_slacko_5.5.sfs
и файла ядра vmlinuz
2. Если вы работали в "большой" ОС, также стоит сделать копию каталога
/boot
и конфигурации загрузчика3. Копируем новый главный файл на место предыдущего (он будет немного больше прежнего по размерам, это нормально).
4. Переходим в каталог с исходниками ядра и выполняем команду
make install
5. Копируем из
/boot vmlinuz
вместо файла vmlinuz
оригинального Puppy и при необходимости восстанавливаем /boot
и конфигурацию загрузчика.Или же что-то не устраивает, то всегда можно ядро подправить, пересобрав заново с нужными опциями. Итак, чтобы "вернуть все в зад" нужно:
1. Перейти в каталог с исходниками ядра и скопировать куда-нибудь файл
.config
, чтобы потом не выполнять конфигурирование заново.2. Ввести команду
make mrproper (
Эта команда нужна для удаления временных файлов, созданных при предыдущей сборке. Она удаляет также все настройки, которые Вы сделали во время прошлой сборки.)Вернуть
.config
обратно, снова запустить make menuconfig
, отконфигурировать заново и запустить make bzImage
(ну или make modules
, если косяк связан с каким-то модулем, а не с настройкой ядра). Можно отдельно независимо пересобирать ядро и модули (и даже не все модули целиком, а только некоторые из них) если вы знаете, в каком конкретно модуле косяк. Патчи ядра сохраняются и после выполнения очистки.У меня так и не получилось штатными средствами сбросить Default message log level при сборке ядра на уровень 0, как это походу было сделано в оригинальном ядре, и при загрузке выскакивали лишние сообщения ядра, портившие оригинальную красивую загрузку Puppy, патчить ядро я не решился (чтоб чуть что все таки можно было посмотреть вывод ошибок), и просто оставил уровень по умолчанию. А эстетичную загрузку можно вернуть, дописав
loglevel=0
в качестве параметра ядра при загрузке, в настройке загрузчика:kernel /slacko/vmlinuz ro vga=normal loglevel=0
Можно скачать тут Puppy Slacko 5.5. NonPAE Crypto Mod
Использованные источники
1. Ставим ядро 2.6, или Ядерная физика для домохозяйки. Версия 2.0 Копия
2. Сборка ядра linux 3.4.* Копия
3. Работаем с модулями ядра в Linux Копия
4. Debugging by printing
Это перепост заметки из моего блога на LJ.ROSSIA.ORG
Оригинал находится здесь: http://lj.rossia.org/users/hex_laden/328027.html
Прокомментировать заметку можно по ссылке выше.
Pingback: Установка Linux и шифрование ее и всего содержимого жесткого диска. Часть III | Персональный блог Толика Панкова