Чиним поддержку криптографии и ошибку при запуске tcplay в Puppy Slacko 5.5. Часть I.

Также возможно этот способ применим для любых урезанных дистрибьютивов, в т.ч. Live. К Puppy Slacko способ применим до последней (еще не русифицированной) версии, разработчики, раздолбаи, так до сей поры косяк и не поправили
Преамбула
На некоторых дистрибьютивах, при попытке подключения зашифрованного контейнера tcplay/TrueCrypt наблюдается следующая ошибка. tcplay вместо сообщения All ok! выдает ошибку:
device-mapper: reload ioctl on test failed: No such file or directory
При этом в логах, в сообщениях ядра присутствуют следующие записи:
Jul 26 23:18:43 puppypc15732 user.err kernel: [ 177.144795] device-mapper: table: 253:0: crypt: Error allocating crypto tfm
Jul 26 23:18:43 puppypc15732 user.warn kernel: [ 177.144798] device-mapper: ioctl: error adding target to table

Это значит, что в системе отсутствуют модули поддержки криптографии, необходимые tcplay либо TrueCrypt (оба используют системные библиотеки поддержки криптоалгоритмов), причем интересно, что в случае с tcplay шифрование проходит нормально, таким образом tcplay работает как настоящий разведчик. 🙂 Шифрует (донесения в Центр), а расшифровать не может.
Если же после установки tcplay при запуске случилась ошибка
tcplay: error while loading shared libraries: libdevmapper.so.2: cannot open shared object file: No such file or directory.
значит, в системе отсутствует поддержка lvm. Как ее установить, читайте здесь.
Попытаемся это починить. Собственно, способов починить есть два:
1. Собрать нужные криптографические модули и загрузить их
2. Пересобрать ядро с поддержкой криптографии (об этом позже).
Рассмотрим первый способ, на примере PuppyRus Slacko 5.5.

Итак, нам понадобятся:
1. Комплект разработчика, поставляемый в виде отдельного sfs-файла. Скачиваем отсюда, отсюда или с зеркал. Необходим файл devx_slacko_5.5.sfs
1.1. Исходники ядра для вашего дистрибьютива. Для Puppy Slacko 5.5. лежат здесь:
1.2. Для версии без PAE: скачать зеркало (mega.nz) зеркало (Google Drive)
Для версии PAE: скачать зеркало (mega.nz) зеркало (Google Drive)
Подключаем скачанные sfs и приступаем:
1. Первым делом запускаем консоль (если не стоит mc, лучше предварительно его установить, и пользоваться им для рутинных операций) и переходим в каталог с исходниками ядра /usr/src/linux или /lib/modules/XX.XX.XX/source или /lib/modules/XX.XX.XX/build. Каталоги source и build на самом деле символические ссылки на /usr/src/linux так что мы все равно придем туда, куда нужно. XX.XX.XX — это версия ядра дистрибьютива 3.2.33-4g для версии без PAE и 3.4.17 … для PAE-версии.
Внимание! Модули, собранные для одного ядра в большинстве случаев к другому не подойдут, потому исходники для каждого ядра необходимы свои!
Версию ядра можно узнать командой uname -r
2. Далее выполняем
make clean
команда служит для очистки дерева исходников ядра от предыдущих следов экспериментов
3. Копируем конфигурационный файл /etc/modules/DOTconfig-XX.XX-XX-XXXXXXX в текущий каталог под именем .config (имя начинается с точки!), заменяем им уже существующий файл.
4. Выполняем команду
make menuconfig
На экране должно появиться меню конфигурации ядра.
Поскольку все ядро мы собирать не будем, а соберем только недостающие модули поддержки криптографии, то смело переходим в раздел Cryptographics API

Смотреть картинку.
И выставляем опции, как на нижеприведенных картинках:
Смотреть картинку.
Смотреть картинку.
Смотреть картинку.
[* ] — означает, что модуль будет встроен в ядро (встав на нужный пункт нужно нажать клавишу y)
[M] — что будет собран в виде отдельного модуля ядра *.ko (клавиша m)
[ ] — модуль при компиляции будет пропущен. (клавиша n)
Поскольку задачи собрать все ядро в данный момент не стоит, то нам достаточно некоторых собранных модулей. Особо следует обратить внимание на то, чтоб были собраны модули поддержки XTS, LRW, CBC, поддержки шифров AES, Serpent и Twofish и поддержки whirlpool, SHA-512 и RIPEMD-160.
Также особое внимание надо обратить на пункты AES cipher algorithms. Первый из них должен быть вкомпилен в ядро [*], а второй (i586) установлен, как модуль [M].
Убрать первый пункт не получается, а для tcplay нужен именно второй модуль, поэтому обойдем это, установив этот модуль как включаемый в ядро.
Если в качестве модуля собрать оба, то при его подключении произойдет конфликт!
5. Выходим из конфигуратора, сохраняем перед выходом файл конфигурации (будет выдан соответствующий запрос) и выполняем следующую последовательность команд:
make prepare
make scripts
make modules_prepare
make modules SUBDIRS=crypto
make SUBDIRS=crypto modules_install

6. Копируем все файлы *.ko из /lib/modules/XX.XX.XX/build в /lib/modules/XX.XX.XX/kernel/crypto, существующие заменяем
7. Обновляем зависимости модулей командой
depmod -a
и перезагружаем компьютер (естественно, файл сохранения должен быть создан)
8. Создаем скрипт загрузки модулей и сохраняем его в автозагрузку
#!/bin/bash
echo "Loading modules..."
modprobe lrw
modprobe xts
modprobe cbc
modprobe rmd160
modprobe sha256
modprobe wp512
modprobe aes
modprobe serpent
modprobe twofish
modprobe dm-crypt
echo "Complete!"

Скачать с PasteBin
Как вариант, можно указать нужные модули в качестве загружаемых в BootManager (Главное меню —> Система —> BootManager конфигурация загрузки) Добавление нового модуля.



Теперь можно пользоваться tcplay!

Это перепост заметки из моего блога на LJ.ROSSIA.ORG
Оригинал находится здесь: http://lj.rossia.org/users/hex_laden/317479.html
Прокомментировать заметку можно по ссылке выше.