После этого появится файл, который можно подключить как файловую систему Linux. Создайте каталог для её монтирования.
Далее смонтируйте RAM-диск, для чего потребуются привилегии root.
Теперь копия RAM-диска NSLU2 подключена к каталогу nslu2. Для просмотра диска нужно перейти в соответствующий каталог при помощи команды cd, однако будьте осторожны. Любые случайные или преднамеренные изменения будут сохранены. Если вы что-то напутаете, то можете испортить прошивку. Мы постараемся не увлекаться доработкой, чтобы уменьшить вероятность возникновения ошибок. Нам нужно лишь добавить скрипт в процесс запуска. Для начала необходимо найти место, куда можно его добавить. Структура каталогов на RAM-диске оказалась стандартной. На NSLU2, как и на большинстве UNIX-систем, первым запускается процесс "init". В нашем случае, мы определили, что init вызывает etc/rc, который, в свою очередь, выполняет etc/rc.sysinit, а последний - etc/rc.d/rc.1. В файле rc.1 можно увидеть все запускаемые демоны, например web-сервер. В него и следует добавить строчку для запуска нашего скрипта. Приступаем. Сначала следует перейти в соответствующий каталог, после чего можно приступать к редактированию файла rc.1 с помощью любого текстового редактора. Мы добавили строку запуска нашего скрипта перед web-сервером. После изменений этот отрывок файла принял следующий вид:
Перед сохранением изменений проверьте всё ещё раз. Мы создали новую строчку, просто скопировав строчку для web-сервера и изменив надпись "echo" и ссылку на rc.hook. Сейчас нужно создать скрипт, который будет запускать файл rc.1. Скрипт будет сохраняться в каталоге rc.d и носить название rc.hook. Этот скрипт будет искать на жёстком диске другие скрипты и, если они существуют, запускать их. Ниже мы приводим наш вариант скрипта rc.hook.
Первая строка, в принципе, не нужна. Мы добавили её, чтобы сохранить единообразие с другими скриптами в этом каталоге. В следующей строке проверяется наличие запускаемого скрипта rc.custom в каталоге conf/rc.d на жёстком диске. Если файл существует, то он запускается. Снова тщательно проверяем rc.hook. Для этого можно запустить скрипт на тестовой системе и убедиться, что ошибок нет:
В нашем случае скрипт rc.custom не будет обнаружен и rc.hook молча завершит работу. Убедитесь, что всё прошло, как нужно, и демонтируйте RAM-диск.
С изменением прошивки закончили. Если есть желание проверить ещё раз, то можно подключить RAM-диск снова, убедиться в том, что изменения сохранились, и затем отключить. Запаковка и проверка Настало время сложить все части вместе. Для этого нужно сначала запаковать файл RAM-диска.
В результате выполнения этой команды должен получиться файл ramdisk.gz. После этого необходимо создать образ при помощи параметра pack утилиты splitnslu.
После вывода нескольких строк будет создан новый образ newflash.bin. Для спокойствия рекомендуем сравнить размер получившегося файла с размером оригинала:
Размер полученного образа и оригинала должны быть одинаковыми. Теперь, когда образ прошивки готов, можно приступать к её записи на NSLU2. Это, пожалуй, наиболее ответственная часть процесса. До сего момента мы ничего не изменяли на самом устройстве. Вы должны понимать, что рискуете испортить устройство, если в изменениях допущена ошибка. Для обновления прошивки мы используем стандартный интерфейс Linksys. С помощью браузера следует перейти на страницу "Администрирование" (Administration) NSLU2. Далее выбрать пункт "Дополнительно" (Advanced), затем "Обновить" (Upgrade). Нажать на кнопку "Выбрать файл" (Choose File) и найти созданный файл newflash.bin. После этого, в нижней части страницы нужно нажать на кнопку "Начать обновление" (Start Upgrade). Появится меню, после чего затаите дыхание и нажмите "OK". При обновлении прошивки должны замигать индикаторы. Затем появится окно с сообщением о перезагрузке. Выберите "OK". После минуты ожидания, должен прозвучать звуковой сигнал, который свидетельствует о том, что всё прошло нормально. Теперь включаем Telnet, для чего нужно запустить стандартный скрипт Management/telnet.cgi, о котором мы говорили ранее. После этого загляните в каталог /etc/rc.d. Там появился новый скрипт rc.hook. Попробуем его запустить. Он предназначен для выполнения скрипта /share/hdd/conf/rc.d/rc.custom, которого пока ещё нет, так что его нужно создать. Сначала следует проверить, работает ли он. Мы сделали это следующим образом:
Нужно пометить его как исполняемый и попробовать запустить при помощи скрипта rc.hook.
Прозвучит сигнал, после чего выполните перезагрузку.
Примерно через минуту прозвучит стандартный сигнал запуска, а затем, ещё через несколько секунд, другой сигнал. Работает! Сейчас мы можем запускать любые процессы. Добавляем скрипт Пришло время создать новый файл rc.custom. После этого уже не придётся вручную запускать telnet.cgi для включения Telnet, а также скрипты NFS и mt-daapd. Последний раз активируем Telnet и входим в систему. Находим скрипт rc.custom и изменяем его для запуска упомянутых скриптов. Для того, чтобы Telnet остался навсегда, необходимо добавить его запись в файл /etc/inittab. Поскольку мы больше не собираемся использовать SMB, скрипт удаляет соответствующий демон с диска RAM. Это удаление не постоянное, поскольку оно удаляет файлы только на RAM-диске для экономии пространства. Если вам потребуется SMB, то достаточно закомментировать строчки удаления. Следует помнить, что все команды, указанные в этом файле, либо должны выполняться в фоновом режиме, либо выполняться очень быстро, иначе процесс загрузки "зависнет". Ниже приведён наш вариант файла rc.custom:
Если вы что-то напутаете с этим файлом, то ошибку можно будет исправить без модификации прошивки. Скажем, если NSLU2 перестанет загружаться, вы можете подключить жёсткий диск к другой системе и исправить файл. Выполнив указанные изменения, необходимо будет снова перезагрузиться. На этот раз, после перезагрузки, доступ к Telnet должен работать сразу же - без запуска telnet.cgi. Сервер NFS тоже будет работать, а mt-daapd будет искать музыку на жёстком диске. Теперь, когда вы знаете, как устанавливать новое ПО и менять прошивку, настало время рассмотреть ещё одну возможную модификацию. Сообщество NSLU2 выпустило специальную прошивку, которая не создаёт RAM-диск. При этом освобождается до 10 Мбайт памяти. Для системы с 32 Мбайт это немало. Переходим на прошивку Unslung В Интернете уже достаточно давно образовалось сообщество энтузиастов NSLU2. Поэтому вы можете найти различные службы, которые можно будет установить в систему. Нас же больше всего заинтересовала прошивка Unslung, которая расширяет возможности системы. Во-первых, она сохраняет стандартные функции Linksys, в то же время увеличивая опции по настройке. Разработчики-добровольцы хорошо "поковыряли" прошивку. Во-вторых, прошивка добавляет стандартную схему пакетов, которая позволяет с лёгкостью устанавливать новые программные пакеты из Интернета. Наконец, прошивка освобождает до 10 Мбайт памяти. Неплохо для устройства с 32 Мбайт ОЗУ. Дополнительная память позволит запускать более требовательные приложения, например, сервер баз данных или полнофункциональный web-сервер. Но как же разработчики смогли освободить память, нисколько не повлияв на стандартные функции Linksys и, в то же время, добавив новые возможности? Давайте посмотрим. Альтернативы boot-time Для начала, давайте разберёмся с архитектурой boot-time. Как мы уже упоминали, загрузка устройства начинается с RedBoot. Среди всего прочего, этот загрузчик отвечает за копирование ядра Linux и RAM-диска из флэш-памяти в ОЗУ. Когда копирование будет завершено, управление передаётся ядру Linux. Оно стартует и монтирует RAM-диск в качестве корня или базовой файловой системы. Затем из файловой системы начинается процесс инициализации. В ходе его монтируются жёсткие диски и/или флэш-брелоки, а затем запускается web-сервер, файловый сервер и т.д. После чего устройство готово к работе. Все базовые функции NSLU2 запускаются с RAM-диска, поскольку устройство может загружаться даже без подключённых жёстких дисков. Хорошая особенность, но слишком накладная. На 250-Гбайт жёстком диске много свободного места, но вам придётся умещать все необходимые исполняемые файлы, библиотеки, html-файлы и другую информацию на крошечном RAM-диске. Что, если переместить все эти файлы с RAM-диска на жёсткий? Тогда можно было бы распоряжаться намного более объёмной файловой системой и освободить оперативную память, раньше занимаемую RAM-диском. Было бы неплохо сохранить обратную совместимость с процессом загрузки Linksys. Если к устройству подключён диск с файловой системой, то пусть она и используется. Если же диска нет, или нет файловой системы, то пусть создаётся RAM-диск. Именно такой подход и реализует прошивка Unslung. Теперь давайте познакомимся с ней повнимательнее. Выбираем файловую систему Очень часто ядро Linux компилируется с заданным идентификатором, указывающим на диск, который будет использоваться для корневой файловой системы. Он может находиться как в ядре, так и передаваться ядру загрузчиком. В случае NSLU2 Linksys зашила идентификатор в ядро, указав на RAM-диск для корневой файловой системы. Но ведь Linksys ничего другого и не предполагала. Впрочем, как и другие параметры Linux, зашитый идентификатор можно обойти. Linux имеет возможность определения местонахождения корневой файловой системы. Эта возможность часто используется, когда одно ядро должно работать на нескольких аппаратных платформах. К примеру, одно и то же ядро может работать на системе, где корневая файловая система находится на диске IDE или SCSI. Перед тем, как Linux загрузится, система определит загрузочные диски и попытается найти нужный корень. После этого Linux смонтирует корневую файловую систему и продолжит нормальную загрузку. Эта функция и используется в Unslung. Код Unslung для определения загрузочной файловой системы не входит в ядро. Вместо этого он включён в функцию Linux initrd. Эта функция создаёт специальный RAM-диск, который содержит пользовательский код, выполняемый до монтирования корневой файловой системы. Разработчики Unslung добавили ложный указатель корня в ядро, а затем добавили код в initrd, который проверяет диски и находит реальную корневую файловую систему. Если таковая будет обнаружена на одном из подключённых жёстких дисков, то Linux будет использовать её, а не RAM-диск. После чего 10 Мбайт RAM-диска будут освобождены для других нужд. Установка Unslung Ещё одна интересная особенность Unslung - богатые возможности по настройке. Как и в предыдущей части нашей статьи, Unslung добавляет ссылки на стандартные скрипты запуска - но не только. Скрипты Unslung, названные "обходными скриптами", добавляют ссылку в каждый загрузочный скрипт. В результате, вы можете добавлять код в любой момент загрузки. Кроме того, обходные скрипты позволяют полностью отменять стандартные функции Linksys. К примеру, если сервер SMB вам больше не нужен, обходной скрипт сделает "return 0", в результате чего оставшаяся часть Samba в скрипте Linksys будет пропущена. Также можно запустить Samba со своими опциями или использовать свою собственную версию Samba. Подобные возможности добавлены ко всем загрузочным скриптам Linksys. Наконец, в Unslung присутствует стандартный пакет ipkg, который изначально был разработан для наладонных систем Linux. После чего этот пакет расширили до других устройств с ограниченными ресурсами. Использование стандартного пакета позволяет легко добавлять функции к устройству. К примеру, для добавления сервера Secure Shell достаточно будет выполнить всего одну команду. После этого пакет будет скачан из Интернета, сконфигурирован и установлен. На момент выхода статьи в Интернете уже присутствовало 19 пакетов, однако в будущем их число будет значительно расширено - ожидается более 1500 пакетов для NSLU2! Впрочем, довольно теоретизировать - перейдём к практике. Мы предполагаем, что вы уже включили Telnet на устройстве, как показано в первой секции нашей статьи. Если вы следовали нашим инструкциям в других разделах, то сначала нужно зарезервировать наши предыдущие изменения. Прошивка Unslung использует те же каталоги, которые были созданы нами в папке /share/hdd/conf, - это bin, etc и rc.d. Мы просто перенесём наши каталоги и позволим Unslung выполнить свою установку. А затем мы вернём наши изменения. Поэтому зайдите на NSLU2 с помощью Telnet и переименуйте каталоги.
На этот раз мы не будем создавать собственную прошивку, использовав UNSLUNG-1.11-beta.zip (скачать можно здесь). Скачайте прошивку Unslung и распакуйте её в рабочую папку. Вы получите три файла: README и два образа прошивки. Один образ предназначен для использования USB-дисков, форматированных под Linux ext3, а второй - для системы Windows VFAT. В нашем случае мы решили использовать диски VFAT, поскольку при этом поведение устройства оказывается ближе к стандартному. Соответственно, мы взяли образ UNSLUNG-1.11-beta-V23R25.bin. В файле README содержится подробная информация о прошивке, а также инструкции по созданию собственной версии прошивки. После распаковки выключите NSLU2 и отключите жёсткие диски. Включите NSLU2 обратно и прошейте образ Unslung с помощью стандартной утилиты модернизации Linksys. После успешного процесса и загрузки, включите Telnet, используя URL Management/telnet.cgi (как показано в первой части статьи). После этого зайдите на устройство с помощью Telnet, используя имя пользователя root и пароль uNSLUng. Исследуем возможности Unslung Сейчас мы используем новую прошивку, но набор функций, на первый взгляд, не изменился. Мы по-прежнему используем стандартный RAM-диск, без каких-либо новых пакетов. Теперь подключим диск к USB-порту 1. Через несколько секунд введите команду df - она должна показать смонтированный диск. Теперь давайте создадим корневую файловую систему на нашем диске - скопируем RAM-диск. Для этого можно использовать команду:
По мере копирования RAM-диска на жёсткий диск будут выводиться кое-какие сообщения. После завершения наберите:
Устройство будет перезагружено. После загрузки вновь включите Telnet, использовав URL telnet.cgi. Введите имя пользователя и пароль. Команда df должна показать раздел conf, смонтированный в каталоге "/" и в оригинальном местоположении, где утилиты Linksys и ожидают его увидеть. Теперь у нас есть 10 Мбайт освобождённой памяти! Для проверки введите:
Вы должны увидеть небольшой объём памяти, отмеченный как free и большое количество в пунктах buffers и cached. Эта память доступна для приложений. Теперь давайте включим Telnet через обходной скрипт. Информацию по созданию обходных скриптов можно получить из файла README, поставляемого вместе с прошивкой Unslung. Мы создали копию /etc/inetd.conf в каталоге /opt/etc/. Затем в каталоге /unslung мы создали xinetd-версию обходного скрипта, назвав её rc.xinetd.
Команда будет выполняться перед запуском inetd, просто удостоверяясь, что конфигурационный файл запустил Telnet. Строчка "return 1" разрешает выполнение остальной части стандартного скрипта. Если каталоги вас смутили, то вы должны посмотреть, как обходные вызовы осуществляются в оригинальных файлах rc, к примеру, в /etc/rc.d/rc.xinetd. Теперь, после перезагрузки, Telnet должен запускаться автоматически. Настало время добавить несколько приложений. Добавляем приложения Как мы уже упоминали выше, Unslung использует систему пакетов ipkg. Сначала давайте обновим эту систему. Для этого выполните команду "ipkg" с параметром "update".
Команда выведет несколько строчек оповещений. Если команда ipkg выведет сообщение об ошибке, просто запустите обновление снова. Если же ошибки не исчезают, то проверьте настройку на NSLU2 шлюза по умолчанию и DNS-сервера (на стандартном экране настройки Linksys). Теперь давайте посмотрим, какие пакеты доступны для нашего устройства.
Вы должны получить список пакетов, включающий nfs и mt-daapd. Давайте попробуем установить nfs. Сначала нам понадобится portmap.
Вы получите несколько строк сообщений, как и раньше, если установка будет успешной. Если вы уже установили nfs, руководствуясь предыдущими разделами нашей статьи, то можете просто скопировать зарезервированные файлы в каталог etc.
В следующую перезагрузку nfs должен работать. Вы можете заметить ещё один пакет nfs в списке ipkg. Это другая версия, которая поддерживает v3 протокола nfs. Самая значительная особенность v3, по нашему мнению, - это поддержка файлов больше 2 Гбайт. У нас не было достаточно времени, чтобы выявить другие новшества. Если вы желаете попробовать nfs v3, то сначала удалите старый пакет nfs, используя функцию "remove" с ipkg. Если вы желаете установить mt-daapd, то используйте следующую команду:
С помощью ipkg сервер iTunes устанавливается намного легче. После установки, если вы следовали нашей статье, скопируйте зарезервированные файлы в каталог /etc.
Если это ваша первая установка mt-daapd, то скопируйте конфигурационный файл из каталога /opt/etc в папку /etc. Кстати, у некоторых пользователей возникали проблемы доступа к файлам MP3. Если они у вас тоже появятся, то либо измените права на дерево MP3, либо "runas" в конфигурационном файле - чтобы там был пользователь, обладающий достаточными правами. Проверьте конфигурацию mt-daapd ещё раз, чтобы были правильные пути, - и после перезагрузки вы получите рабочий сервер iTunes! Теперь давайте попробуем установить новый пакет. Telnet - штука полезная, но небезопасная. Пароль и имя пользователя Telnet посылаются по сети в открытом виде. Намного лучшим решением является secure shell (ssh). Для ограниченных по ресурсам устройств лучше использовать сервер dropbear. Устанавливать его очень легко.
Установка в данном случае будет более длительной, поскольку необходимо сгенерировать криптографические ключи. Когда она завершится, вы получите сервер ssh. Теперь с Linux или Macintosh OS X можно будет входить на NSLU2 по ssh.
Как только вы включите ssh, мы рекомендуем удалить скрипт Telnet из каталога /unslung. Дальнейшее расширение возможностей NSLU2 Регулярно выполняйте обновление ipkg (ipkg update) и просматривайте доступные пакеты (ipkg list). Вы также можете присоединиться к сообществу разработчиков и предложить свой пакет. Также вы можете поделиться с разработчиками своими отзывами. Для этого достаточно перейти на страницу NSLU2 Yahoo. Конечно, Unslung - мощная прошивка, но это не финальный этап эволюции NSLU2. Как мы понимаем, NSLU2 постепенно из сетевого хранилища превращается в платформу с открытым исходным кодом. В следующей статье, посвящённой NSLU2, мы расскажем о других возможных применениях. Ну, а пока мы рекомендуем отслеживать страницы Linux на NSLU2 и сайт группы разработчиков NSLU2 Linux.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|