воскресенье, 26 октября 2014 г.

Дополняем функциональность Seagate Wireless Plus (продолжение)

Продолжу тему, начатую в предыдущей заметке. В ней мы остановились на том, что выяснили правильный репозиторий, из которого следует загружать дополнительное ПО для SWP. И, да, я ведь обещал рассказ о путешествии, поэтому, на всякий случай, еще раз предупреждаю: приготовьтесь читать не инструкцию, а процесс.


Установка midnight commander.

Выяснив адрес загружаемого пакета для midnight commander, я бодренько скачал его на... свой ноутбук. Решил посмотреть, что это за зверь такой, файл с расширением ipk. Для исследований я использовал старый добрый Total Commander (далее, просто TC, он же командир): пользуюсь я им давно, плагинов к нему достаточно, в общем, его возможностей должно хватить. Открываю командира, позиционирую курсор выбора на только что скачанном файле пакета и жму Ctrl+PgDn.

Для тех, кто не в курсе, это такой своеобразный способ отобразить внутреннее содержимое сжатого, или, другими словами, заархивированного, файла. Когда файл архива имеет стандартное для такого типа файлов расширение, скажем, zip или rar, то для "входа" в него достаточно просто нажать Enter, когда файл подсвечен курсором выбора. Потому что поддержка работы с такими файлами встроена в TC изначально. Для некоторых типов архивных файлов, например, для файлов, созданных при помощи 7z, необходимо, чтобы в TC были установлены соответствующие плагины. Некоторые архивные плагины, тот же плагин 7z, могут работать с различными типами архивных файлов, в том числе, и не совсем с архивными, например, с jar файлами. Если TC опознал файл как архивный, он отображает соответствующую иконку, и просмотреть содержимое файла можно таким же образом, каким вы переходите во вложенные каталоги, то есть, при помощи клавиши Enter. Если же файл не опознан, то командиром рисуется стандартная иконка, и... в старых версиях, Enter вам не помог бы заглянуть внутрь такого файла. Еще хуже обстоит дело с самораспаковывающимися архивами, или другими типами файлов, нажатие на Enter для которых приводит либо к запуску самого файла, либо к выполнению какой-то программы, с этим файлом в качестве входного параметра. И тут на выручку приходит эта самая комбинация клавиш Ctrl+PgDn, которая, на самом деле, и была предназначена в TC для работы с архивными файлами. Командир, получив эту комбинацию клавиш, начинает перебирать все возможные способы проникнуть внутрь выбранного файла. Ладно, все это лирика, отступление слегка затянулось, пора возвращаться к теме.

Итак, ipk файл... Он оказался той еще матрешкой. Внутри находится еще один файл, который также является архивным; и уже внутри этого вложенного архива размещено... еще два архива (см. рисунок).

Внутри вложенного архивного файла опять архивы
Файл с именем control.tar.gz содержит, в конечном итоге, файл с информацией о пакете, в том числе, имена пакетов, от которых зависит mc. На самом деле, это важная информация, но об этом я задумался чуть позже.

Содержимое файла control
Файл же с именем data.tar.gz приводит к некоторой файловой структуре, которая полностью соответствует структуре установленного mc - уж я-то знаю, первый свой mc я установил на WD MyBook Live.

Файловая структура mc
Тут-то и возникла мысль, что можно просто разархивировать содержимое файла data.tar в корень файловой системы диска - уж больно мне не хотелось устанавливать программы с помощью менеджера пакетов.

Но придумать мало, надо еще воплотить все эти придумки в жизнь. И, уже в самом начале, меня ждало небольшое затруднение. Вернее, не затруднение, а так, некоторое неудобство. Дело в том, что SWP предоставляет доступ не ко всей файловой системе, а только к одному каталогу с именем Public-1. К корню же файловой системы внешним клиентам доступ закрыт. И, хотя, это положение вещей можно изменить, я решил пойти менее (или, может, все-таки более?) изощренным путем: просто скопировать файлы в доступный каталог, затем по протоколу telnet подсоединиться к SWP и скопировать файлы из общедоступной директории в корень файловой системы.

Сказано - сделано. Подключил SWP к домашней сети, открыл с помощью TC общедоступный каталог, и, с помощью TC же, скопировал туда содержимое вложенного архива data.tar. После этого запустил Putty и подсоединился к SWP по telnet-у. Создал в корне файловой системы каталог opt, перешел в него и, уже оттуда, скопировал все из публичного каталога. Все это только при помощи командной строки. Ну ничего, ничего, скоро все будет закончено...

Святая простота! Как там в пословице? Скоро сказка сказывается, да не скоро дело делается? Да, кажется, именно так. Первая попытка запустить mc - и имеем новое затруднение. Ну почему всегда первый блин - комом? Я уже не помню точного сообщения об ошибке, но суть сводилась к тому, что не найден какой-то библиотечный файл, по-моему, речь шла libslang.so.2.

Увидев это сообщение, я, мысленно (а может и нет) еще раз обозвал себя ламером, и полез в файл control - за списком зависимостей. Их там целых три штуки: glib, slang и e2fslibs. И все ipk файлы этих необходимых для работы mc компонентов, конечно же, присутствуют в репозитории Optware. Далее все по шаблону: утаскиваю их к себе на ноут, разархивирую в публичный каталог из всех трех файлов содержащийся в них data.tar (какая неожиданность), и, в telnet сессии, копирую все в подкаталог /opt в корне диска. Запускаю midnight commander... Ничего не поменялось - все то же сообщение об отсутствии какого-то крайне необходимого библиотечного файла, того же, кстати, что и в первый раз. Второй блин от первого ничем не отличался.

Что ж, надо посмотреть, что это за файл там такой. Нахожу его при помощи TC, а он малюсенький такой, просматриваю по F3, а там такой вот незамысловатый текст:

Link: libslang.so.2.2.3

А этот самый libslang.so.2.2.3 вполне себе нормальный файл.

Первой мыслью было переименовать к чертям libslang.so.2.2.3 в libslang.so.2, или скопировать. Но это действия настоящего линуксового ламера, а я уже, видимо, перешел на следующий уровень в этой игре. Поэтому я не поддался этому постыдному порыву, характерного для воспитанных на MS DOS-е, а взял себя в руки и призвал на помощь свою логику и знания. Благо знаний пока еще не много и рыться в них не сложно и не долго.

И тут меня постигла удача: не смотря на скудость моих познаний, информация о symlink-ах в них, все же, присутствовала. И я тут же ее проверил. Как? Очень просто: в telnet сессии удалил этот маленький файл и, при помощи команды ln -s, создал нужный symlink. После этих манипуляций запуск mc стал ругаться на другую библиотеку, если память не изменяет, из пакета glib.

Не буду описывать повторяющихся действий, отмечу лишь, что после того, как были созданы все необходимые symlink-и, mc благополучно запустился.

Вот он, Midnight Commander.
Но... этого мне показалось мало. Я подумал, что это совсем не дело - вручную удалять файлы и создавать symlink-и вместо них. Тем более, посмотрев на их размер, я заподозрил, что файлы, которые я удалял, на самом деле, и являлись symlink файлами. Просто, когда я их распаковывал при помощи TC, они создались, как простые текстовые файлы. А что будет, если распаковать их при помощи tar?

Я не специалист по всевозможным утилитам Linux, тем более, испытываю сложности с конструированием конвейеров команд. Поэтому команду, приводимую ниже, я бы смог выжать из себя... В общем, думаю, это сообщение появилось бы не скоро. Итак, вот эта командная строка, которую я нашел на просторах интернета и творчески переработал для ipk файла с midnight commander-ом:

tar -xOvzf mc_4.7.5.5-1_arm.ipk ./data.tar.gz | tar -C / -xzvf -

Если ее разобрать, то можно увидеть, что в приведенной строке, на самом деле, две команды. Первая разархивирует (ключ x) из файла mc_4.7.5.5-1_arm.ipk (ключ f с последующим именем файла) с использованием gzip (ключ z) в стандартный поток вывода (ключ O) с расширенными атрибутами (ключ v) файл data.tar.gz. Вторая команда сначала переходит (ключ C) в каталог / (корень файловой системы), затем разархивирует (ключ x) с использованием gzip (ключ z) опять же с расширенными атрибутами (ключ v) все, что приходит по стандартному потоку ввода (ключ f с последующим символом "-"), а приходит в стандартный поток ввода то, что предыдущая команда направила в стандартный поток вывода - не зря же команды объединены в конвейер (вертикальная черта "|" между командами). Кстати, спустя какое-то время после разбора этой командной строки, я наткнулся на такое понятие, как tarpipe. Конечно, это не совсем тот случай, но очень, очень похожий.

Итак, находясь в telnet сессии, я удалил созданный каталог /opt со всем содержимым, и, перейдя в каталог, содержащий ipk midnight commander-а, запустил приведенную выше команду. К моему облегчению и полному удовлетворению, в корне файловой системы появился каталог opt, содержащий в себе разархивированный midnight commander и, что самое главное, все маленькие файлы, которые я раньше удалял, и вместо которых создавал symlink-и, действительно сами оказались настоящими symlink-ами. Повторив те же действия с ipk файлами требуемых библиотек, я спокойно запустил mc.

Что ж, я заслужил переход на следующий уровень, не правда ли? И, как гласит, народная мудрость, аппетит приходит во время еды. О прохождении следующей ступени читайте в продолжении, если, конечно, хотите, и вам интересно.



Комментариев нет:

Отправить комментарий