2Модератор:
прошу не пинать ногами, решил поделиться пошаговой инструкцией для людей, которые понимают что-то в администрировании, но для которых Linux пока еще все-таки скорее на "вы", чем "на ты", а потребность с ним разобраться все-таки возникает. Написать решил из-за того, что сам потратил несколько дней на этом форуме, чтобы понять, какой минимум шагов необходимо предпринять, чтобы иметь возможность удобно "ковырять" всеми нами любимую железяку. У меня wl500gPv2, но я постараюсь "разжевать" каждый шаг с тем, чтобы люди не тупо повторяли инструкцию, а понимали, зачем каждый шаг нужен. Поскольку сам в Linux новичок, прошу "старших товарищей" поправлять.
Итак:
Цели:
1. Хочу "видеть" файловую систему роутера в удобном и привычном виде (для меня это интерфейс Far Manager'а). Фанаты Total Commander'а найдут на этом форуме инструкцию по доступу по SFTP из него.
2. Хочу иметь возможность копировать файлы туда-обратно, опять же через Far.
3. Пока не хочу вставлять в роутер флешку/usb диск и нагромождать в него кучу непонятного/ненужного мне (пока) ПО. Т.е. все должно быть по-минимуму (пока). Фанатам point'n'go - сюда: http://rung.narod.ru/
4. Хочу понять, как это все работает и устроено
5. Хочу сам разобраться в скриптах, iptables, демонах, шедулере (crond) и т.п.
Первые шаги:
1. Предполагается, что в роутере стоит прошивка "от энтузиастов" http://code.google.com/p/wl500g/. Желательно - последняя. Крайне желательно - 'rtn', а не 'd', т.к. ядро 2.6 все-таки поинтересней, чем 2.4, во всех смыслах. К тому же поддержка 2.4, как я понимаю, скоро умрет.
2. Поскольку для доступа к роутеру нужен будет и telnet, и ssh, через web-морду настраиваем разрешения для этих ценных сервисов в пункте System Setup - Servicies:
Enable telnet access: Yes
Enable SSH access: Yes, lan only (для начала вполне достаточно)
Disable SSH password login: No (для параноиков: при выставлении в yes авторизация в SSH, точнее, в демоне dropbear, который отвечает за SSH, авторизация будет проходить только по паре открытый-закрытый ключ. Пусть меня поправят, но мне кажется, что сначала ключи в роутере должны как-то появиться. Можно, конечно, через telnet, но, как достать оттуда открытый ключ?...)
3. Далее пояснение: обязательно требуется настроенный доступ к интернет, иначе доп. пакеты придется носить на роутер через флешку, что нудно и долго. Т.е. к данному шагу роутер уже должен иметь доступ в Сеть, неважно как - хоть через другой роутер, хоть как. Но dns-resolving и доступ в Сеть должны быть.
4. Для начала заходим на роутер по telnet. Нам потребуется выполнить минимальный набор команд, чтобы "наступило дальнейшее счастье". Спец. замечание для фанатов Windows 7/Vista: по умолчанию telnet client в системе отсутствует, добавьте его из панели управления-программы и компоненты-компоненты Windows-бла-бла-бла (нету 7ки под рукой, чтобы написать).
5. Итак:
telnet my.router (или что там у вас - 192.168.1.1, etc.)
логин, пароль.
Вы оказываетесь в ash shell: http://linux.about.com/library/cmd/blcmdl1_ash.htm, если я правильно понял из описания busybox'а.
этот шелл все-таки поинтересней cmd от windows, но для продвинутых добавлю: cmd "ногами торчит" из unix'а, так что общие вещи все-таки есть и их больше, чем может показаться на первый взгляд.
6.
Code:
mkdir /tmp/local/opt
mount /tmp/local/opt /opt
поясню: в роутере используется "псевдо-файловая-система", которая создается в памяти роутера каждый раз при его включении путем разворачивания одного большого архива, хранящегося в сжатом виде на флеш-памяти роутера, наряду с загрузчиком (boot loader'ом) и содержимым nvram (по-моему, так, подробности на форуме есть). За это отвечает boot loader.
Поскольку нам необходимо обеспечить две вещи: сохранность наших изменений после перезагрузки и совместимость с пакетами (точнее, не совместимость, а удовлетворение их требований к установке), нужно, чтобы каталог /opt корня стал writable. Две вышеуказанные команды это и делают. Здесь и далее: за подробностями - в гугл/яндекс/форум и т.п. Эти команды - некое отдаленное подобие subst в windows.
7. Далее: то, что в windows называется "дистрибутив" в unix называется package - пакет. Примерно такое соответствие (гуру, не пинайте )) Поэтому установка чего-то на роутер - это, как правило, установка package. Они находятся в репозитории - это сервер в сети, куда добрые люди уже положили нужные пакеты. Откуда они там берутся - отдельная песня, пока для простоты сделаем некую аналогию с windows update.
существует "точка отсчета" - есть пакет, предназначенный для установки других пакетов и управления уже установленными. Т.е. это некий аналог windows installer - без него - никуда. А минимальный вариант этого пакета - простой shell-скрипт ipkg.sh, который заботливо уже лежит в прошивке, как и dropbear - демон (в терминологии windows - сервис), предоставляющий доступ по SSH (secure shell - http://en.wikipedia.org/wiki/Secure_Shell - некий аналог telnet, но secure).
Но! В прошивке нет поддержки SFTP (secure FTP, а без него "ходить" по файловой ситеме роутера можно только с помощью команд самого shell, что отправляет нас в далекие времена, когда альтернативы командной строке не было...)
Еще замечание: пакеты имеют зависимости от других пакетов, и "взрослый" менеджер пакетов в состоянии самостоятельно определять, что еще нужно доустановить, чтобы затребованный пакет заработал. Все это берется в репозитории, в т.ч. и информация о зависимостях (dependencies).
Резюме: нам нужен пакет - менеджер пакетов, и пакет, который пустит нас по SFTP - это openssh-sftp-server.
Поэтому:
Ставим менеджер пакетов:
Code:
ipkg.sh update #обновление самого скрипта
ipkg.sh install ipkg-opt #это установка взрослого менеджера пакетов
ipkg update #обновление этого менеджера - перестраховка
ipkg upgrade #обновление этого менеджера - перестраховка
Теперь ставим openssh-sftp-server:
Code:
ipkg install openssh-sftp-server
Теперь сделаем так, чтобы всегда при старте монтировался /tmp/local/opt:
post-boot, если есть, выполняется каждый раз после (пере)загрузки роутера, код ниже проверяет, есть ли этот файл, и, если есть дописывает строчку в существующий, если нет, то создает. Не проверяется наличие строчки в этом файле - желающие подстраховаться идут в поиск команды grep.
Code:
if [ ! -f "/usr/local/sbin/post-boot" ]; then
mkdir -p /usr/local/sbin/
echo "#!/bin/sh" >> /usr/local/sbin/post-boot
fi
echo "mount /tmp/local/opt /opt" >> /usr/local/sbin/post-boot
chmod +x /usr/local/sbin/post-boot #помечаем post-boot как исполняемый
Финал (за пояснениями - в поиск по форуму):
Code:
flashfs save && flashfs commit && flashfs enable && reboot
Далее самое интересное:
Берем плагин для фара: WinSCP здесь: http://winscp.net/eng/download.php. Ставим. Под Far2 тоже работает. Создаем подключение, указываем логин и пароль, соглашаемся на приглашение о неизвестных ключах, заходим на роутер и наслаждаемся возможностью бродить по нему, как по диску, копировать файлы туда/обратно, редактировать их, просматривать и т.п. Рекомендую включить опцию в настройках плагина WinScp - Transfer settings - Transfer mode - binary, чтобы при сравнении панелей не вылезали разные размеры файлов из-за автоматической трансляции последовательностей lf / cr-lf между unix и windows. Редактор фара прекрасно понимает только lf в unix-shell скриптах.
Результат:
Теперь можно быстро-просто-удобно править скрипты в самом роутере (заходя туда телнетом только для
Code:
flashfs save && flashfs commit && flashfs enable && reboot
.
Если стоит другой must-have плагин для фара - colorer, то редактирование становится просто сказкой. При этом мы ничего к роутеру не цепляли - ни флешки, ни диска. Для многих вещей этого вполне достаточно. Не стоит пытаться ставить в роутер mc - на флеше роутера для него не хватит места, т.к. он потащит за собой кучу зависимостей, и вы долго будете пытаться понять, что место просто кончилось. Все "тяжелые" вещи уже требуют внешнего накопителя.
Мне, например, потребовалось сделать в роутере multi-wan, и больше ничего. ради набора скриптов общим размером около 60К цеплять в роутер внешний флеш и тащить всю кучу из раздела "для чайников" показалось сущим идиотизмом. При этом, поскольку скрипты старые и поддержки l2tp в них не было (взяты на этом форуме http://wl500g.info/showpost.php?p=35225&postcount=1), нужно было иметь возможность их быстро и удобно смотреть и править, ради чего все, собственно изначально и затевалось
Скриншоты о проделанной работе: