1

Тема: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

В прошивках от 27.01.2012 появилась возможность устанавливать приложения на встроенную флешь память кинетика. Если выполнить команду

flash set EXTINIT_FROM_STORAGE_ENABLED 1

То будут вызываться скрипты /storage/bin/ext_init.sh и /storage/bin/ext_firewall.sh
При сбросе настроек в default переменная EXTINIT_FROM_STORAGE_ENABLED сбрасывается в 0, это уберегает от криво написанных скриптов.

Размер раздела /storage в настоящий момент - 2 Мб, возможно, этот размер будет меньше в следующих прошивках.

Возникают вопросы:
1) Следует ли сделать установщик для приложений в storage (думаю не нужен).
2) Следует ли сделать специальные версии dropbear и sftp-server для storage, или достаточно включить обычный telnet для управления (плюс wget для заброса приложений).
3)  Что оставить из модулей в busybox для уменьшения размера (как минимум crond). В настоящий момент

Currently defined functions:
    arping, awk, basename, blkid, chown, clear, crond, crontab, cryptpw, date, diff, dirname, dmesg, dos2unix, du, egrep, env, fgrep,
    find, grep, gunzip, gzip, hexdump, hostid, hwclock, id, ipcalc, less, lock, lzcat, lzma, md5sum, mesg, mkdir, mkfifo, mknod,
    mkpasswd, mktemp, more, mount, mv, nc, nice, nohup, od, passwd, pkill, printf, pwd, rdate, renice, reset, rmdir, run-parts, sed,
    seq, sha1sum, sha256sum, sha512sum, sort, start-stop-daemon, strings, stty, sysctl, tar, tee, time, traceroute, umount, uname,
    uniq, unix2dos, unlzma, unzip, uptime, usleep, vi, watch, watchdog, which, xargs, zcat

4) Что еще нужно?



2

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

Zyxmon
1. Не нужно.
2-3. Не готов ответить.
4. М.б. мои проблемы с незапуском ext_firewall.sh связаны с тем, что диск долго монтируется, а запуск  ext_firewall.sh
происходит раньше. Попробую засунуть в /storage скрипт ext_init.sh, который будет запускать только демон-таймер (расположенный там же, в /storage ) и периодически проверяющий, напр., существование папки /media/DISK_A1/system/bin. И как только эта папка будет существовать,  демон-таймер запустит существующие скрипты из /media/DISK_A1/system/bin. Тогда не д.б. и проблемы "двойного старта". Нечто похожее я сделал на Dune 101, работает.

...Упс, на ixbt вы подумали тоже самое.

Отредактировано vovic67 (2012-01-28 13:28:35)



3

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

vovic67, сейчас перед фактическим монтированием вызывается hdparm для отключения APM на hdd. Монтирование идет дольше....

PS crond из собранного bb ищет задания в папке /media/DISK_A1/system/etc/crontabs. Если предполагается использование cron в /storage, то нужно или пересобрать bb, или использовать флаг -с. Это, если демон-таймер использует crond.



4

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

Размеры бинарников
bysybox 335k (можно уменьшить)
dropbear 214k (наверное, можно уменьшить)
sftp-server 71k
дополнительно можно запихнуть
openvpn 406k + liblzo 111k
cifs.ko  371k
tun.ko 14k
Это все в 2М на /storage помещается



5

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

Чтобы не открывать новую тему, напишу здесь, Zyxmon извините.
Таймер собрал, и судя по исходникам, папка для скриптов д.б. /storage/system/bin/

# flash set EXTINIT_FROM_STORAGE_ENABLED 1
# flash set EXTINIT_FROM_DISK_ENABLED 0

# echo eval `flash storage=%EXTINIT_FROM_STORAGE_ENABLED disk=%EXTINIT_FROM_DISK_ENABLED`
eval storage="1";disk="0"

Скопировал скрипт ext_init.sh в /storage/system/bin/ (внутри только процедура start, которая запускает таймер (который пока ничего не делает) и logger), все равно подхватываются скрипты из /media/DISK_A1/system/bin, т.е. их не д.б.
По команде reboot подхватывается скрипт из /storage/system/bin/, который запускает таймер и логирует, но при горячем монтировании диска работают только скрипты из /media/DISK_A1/system/bin, из /storage/system/bin/ скрипт не выполняется (или я опять туплю, завтра посмотрю внимательнее).

Отредактировано vovic67 (2012-01-28 22:59:09)



6

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

vovic67 пишет:

все равно подхватываются скрипты из /media/DISK_A1/system/bin, т.е. их не д.б

В /bin/automount.sh переменная EXTINIT_FROM_DISK_ENABLED не проверяется и при монтировании диска скрипт ext_init.sh вызывается. А в /bin/init.sh есть проверка.



7

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

Желающие могут попробовать. Сам пока не проверял.
Скачиваем http://keenetic.zyxmon.org/files/storage/storage.tar.gz на кинетик, из системы, установленной на usb распаковываем:

tar -xzf storage.tar.gz -C /

Генерим с помощью dropbearkey ключи rsa и dss. Можно не генерить, а скопировать имеющиеся в папку /storage/system/etc/dropbear
Включаем исполнение скриптов с флешки

flash set EXTINIT_FROM_STORAGE_ENABLED 1

Отмонтируем usb и перегружаемся. Отписываемся, работает ли dropbear из /storage или нет.
Большую часть приложений можно ставить в /storage с помощью opkg, установленного на usb. Для этого нужно в
/media/DISK_A1/system/etc/opkg.conf
Прописать строку
dest storage /storage/system/
И устанавливать с ключем -dest storage, например, так

opkg -dest storage install kmod-fs-cifs

Некоторые бинарники привязаны к папке /media/DISK_A1/.... Такие бинарники нужно будет пересобрать.
В архиве порезанный dropbear, порезанный busybox и sftp-server. Общий объем после распаковки чуть менее 450к.



8

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

Почистил тему от offtopic!



9

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

Собранный dropbear для storage рабочий, проверено. Для "полного счастья" нужно создать в /var/tmp такой файл .profile

# cat /var/tmp/.profile
export PATH=/storage/system/bin:/storage/system/sbin:/storage/system/usr/bin:/storage/system/usr/sbin:/sbin:/usr/sbin:/bin:/usr/bin
export LD_LIBRARY_PATH=/storage/system/lib:/storage/system/usr/lib:/lib:/usr/lib

В следующем варианте архива сделаю его создание в скрипте ext_init.sh.
grep в busybox лишний, есть в родном, выкину, уменьшу размер.



10

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

Zyxmon пишет:
vovic67 пишет:

все равно подхватываются скрипты из /media/DISK_A1/system/bin, т.е. их не д.б

В /bin/automount.sh переменная EXTINIT_FROM_DISK_ENABLED не проверяется и при монтировании диска скрипт ext_init.sh вызывается. А в /bin/init.sh есть проверка.

Подправил все вызовы. Добавил /bin/ext_call.sh. Все вызовы ext_*.sh теперь идут через него, а следовательно гарантировано управляются настройками.

Сюда выложил новые сборки.



11

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

Holix, спасибо, забрал, ближе к вечеру проверю на Гиге.



12

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

Holix - спасибо.
Установил прошивку Holix на старший кинетик без проблем. Это версия с ntfs3g и transmision 1.93.
Скрипты допилены, но еще не проверял скрипты из /storage.

All Может еще и vi выкинуть из bb?
Забыл написать, что пароль для dropbear из /storage: zyxel. Можно его поменять командой passwd, если прописаны пути к бинарникам в /storage (создать .profile).



13

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

vi не нужен, кто умеет в нем работать, сам и добавит.

Скопировал скрипты ext_init.sh и ext_firewall.sh  из  /media/DISK_A1/system/bin в /storage/system/bin,  из  /media/DISK_A1/system/bin/ скрипты не удалял.
flash set EXTINIT_FROM_STORAGE_ENABLED 1
flash set EXTINIT_FROM_DISK_ENABLED 0 - обязательно, иначе после скриптов из /storage/system... будут выполняться скрипты из /media/DISK_A1/system...
Все отлично работает из  /storage/system/bin:
перезагрузка (или "холодный" старт) - ext_firewall.sh,  ext_init.sh start,  ext_init.sh restart;
отключение USB - ext_init.sh stop;
подключение USB - ext_init.sh start.
Не проверил только сброс к заводским настройкам (обнуление EXTINIT_FROM_STORAGE_ENABLED и объединичение  EXTINIT_FROM_DISK_ENABLED).

Отредактировано vovic67 (2012-02-01 12:02:39)



14

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

Попробовал  с timer-daemon
В скрипте /storage/system/bin/ext_init.sh изменил так (altd это таймер)

init() {
  for prog in `ls $INITD/S??*`; do
    $prog start $2
...
start() {
  /storage/system/bin/altd
...
restart - теперь ничего не делает

Таймер проверяет наличие папки и , если папка существует, запускает тот же скрипт с ключем init

  system("/storage/system/bin/ext_firewall.sh");
  system("/storage/system/bin/ext_init.sh init");

Работает.



15

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

Тем, кто самостоятельно собирает приложения
Сделал "псевдоплатформу" keenetic-storage для сборки специальных вариантов приложений для /storage.
Подробнее в http://forum.zyxmon.org/post4240.html#p4240 и файле History.



16

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

Пока архив не менял. Как найду время - проверю.
После распаковки рекомендую выполнить

chown -R 0:0 /storage

Скритпы ext_init.sh -
http://zyxel-keenetic-packages.googleco … xt_init.sh
(добавил создание /var/tmp/.profile)

S10dropbear
http://zyxel-keenetic-packages.googleco … 10dropbear
В этом варианте запускается на нестандартном порту 1022, если нужно - смените.
Скрипт теперь не срабатывает при монтировании/размонтировании usb, для большинства приложений из /storage это не нужно.

Проверил работу sftp-server (вариант для /storage ), все работает.
cron работает, но нужно поменять владельца /storage/system/etc/crontabs/root
(см выше chown).



17

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

Архив перезалит, работа проверена.
Ссылка старая http://keenetic.zyxmon.org/files/storage/storage.tar.gz
Краткая инструкция по установке (нужна предварительная установка "системы" на USB носитель).

$ cd /media/DISK_A1/system/tmp/
$ wget http://keenetic.zyxmon.org/files/storage/storage.tar.gz
--2012-02-04 10:31:04--  http://keenetic.zyxmon.org/files/storage/storage.tar.gz
Resolving keenetic.zyxmon.org... 217.174.105.180
Connecting to keenetic.zyxmon.org|217.174.105.180|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 194274 (190K) [application/octet-stream]
Saving to: `storage.tar.gz'
....
/media/DISK_A1/system/tmp$ tar -xzf storage.tar.gz -C /
/media/DISK_A1/system/tmp$ dropbearkey -t rsa -f /storage/system/etc/dropbear/dropbear_rsa_host_key
Will output 1024 bit rsa secret key to '/storage/system/etc/dropbear/dropbear_rsa_host_key'
Generating key, this may take a while...
Public key portion is:
ssh-rsa
.....
media/DISK_A1/system/tmp$ dropbearkey -t dss -f /storage/system/etc/dropbear/dropbear_dss_host_key
Will output 1024 bit dss secret key to '/storage/system/etc/dropbear/dropbear_dss_host_key'
Generating key, this may take a while...
....
rm storage.tar.gz
flash set EXTINIT_FROM_STORAGE_ENABLED 1

Извлекаем usb накопитель, перегружаемся. Заходим по ssh (нестандартный порт 1022, пароль zyxel), меняем пароль. Если хотим, чтобы dropbear слушал на стандартном порту 22, редактируем /storage/system/etc/init.d/S10dropbear

Комментарии по установке на русском.
1. Переходим в папку /media/DISK_A1/system/tmp/
2. Скачиваем архив.
3. Распаковываем.
4. Генерим rsa и dss ключи для dropbear.
5. Удаляем архив.
6. Включаем загрузку скриптов из storage.



18

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

Zyxmon пишет:

Архив перезалит, работа проверена.

Хочу заходить по ssh из интернета. Добавил в S10dropbear в секцию start
iptables -A INPUT -p tcp --dport $PORT -j ACCEPT

Проверил, что порт 1022 открыт. В локальной сети все работает, а из интернета не заходит. Как можно определить в чем же проблема? Спасибо.



19

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

wince пишет:

Хочу заходить по ssh из интернета. Добавил в S10dropbear в секцию start
iptables -A INPUT -p tcp --dport $PORT -j ACCEPT

Проверил, что порт 1022 открыт. В локальной сети все работает, а из интернета не заходит. Как можно определить в чем же проблема?

Попробуйте еще добавить
iptables -t filter -A FORWARD -p tcp --dport $PORT -j ACCEPT



20

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

wince, правила для iptables правильней добавлять через скрипты в папке firewall.d, можно и просто отредактировав скрипт ext_firewall.sh в storage.
dropbear может запуститься еще до "соединения" с интернетом. После соединения правила iptables сбросятся. Если же правила вызываются из firewall.d, то все нужные Вам правила сработают.

PS По iptables есть отдельная тема
http://forum.zyxmon.org/topic85-iptabes.html



21

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

Zyxmon пишет:

dropbear может запуститься еще до "соединения" с интернетом. После соединения правила iptables сбросятся. Если же правила вызываются из firewall.d, то все нужные Вам правила сработают.

Посмотрел в лог веб-конфигуратора, вижу ошибки:
7 фев 14:51:17    dropbear[1357]    Failed reading '/etc/dropbear/dropbear_rsa_host_key', disabling RSA
7 фев 14:51:17    dropbear[1357]    Failed reading '/etc/dropbear/dropbear_dss_host_key', disabling DSS
7 фев 14:51:17    dropbear[1357]    Premature exit: No hostkeys available

Почему он ищет ключи в '/etc/dropbear/' тогда как по S10dropbear они находятся в '/storage/system/etc/dropbear/' и они там действительно есть?



22

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

А Вы создали ключи в /storage/system/etc/dropbear/ (п.4)?
Запускаете dropbear из /storage скриптом?

По умолчанию ищет ключи в /etc/dropbear/, в параметрах запуска указано, что ключи следует брать в /storage/system/etc/dropbear/

Посмотрите (ps) как запущен dropbear из storage, с какими параметрами.
Посмотрите владельца (и права) папки /storage/system/etc/dropbear/



23

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

Zyxmon пишет:

А Вы создали ключи в /storage/system/etc/dropbear/ (п.4)?
Запускаете dropbear из /storage скриптом?

Ключи создал

/var/tmp # ls -la /storage/system/etc/dropbear/
drwx--x--x    2 root     root            0 Feb  6 21:53 .
drwxr-xr-x    5 root     root            0 Feb  6 21:56 ..
-rw-------    1 root     root          459 Feb  6 21:53 dropbear_dss_host_key
-rw-------    1 root     root          426 Feb  6 21:52 dropbear_rsa_host_key

dropbear запускается скриптом из архива

MOUNTPNT="/storage"
MOUNT="$MOUNTPNT/system"
RSA="$MOUNT/etc/dropbear/dropbear_rsa_host_key"
DSS="$MOUNT/etc/dropbear/dropbear_dss_host_key"
PIDFILE="/var/run/sdropbear.pid"
PORT=1022

DROPBEAR="$MOUNT/usr/sbin/dropbear"

start()
{
    $DROPBEAR -d $DSS -r $RSA -p $PORT -P $PIDFILE
}
Zyxmon пишет:

По умолчанию ищет ключи в /etc/dropbear/, в параметрах запуска указано, что ключи следует брать в /storage/system/etc/dropbear/

Как я понимаю $DSS и $RSA указвают на /storage/...

Zyxmon пишет:

Посмотрите (ps) как запущен dropbear из storage, с какими параметрами.

/var/tmp # ps
  PID  Uid        VSZ Stat Command
 ...
 1217 root       1096 S   /storage/system/usr/sbin/dropbear -d /storage/system/
 1430 root        848 S   dnsmasq -u root --all-servers -k
 1532 root        836 S   miniupnpd -a 192.168.1.1 -i eth2.2
 1546 root       1040 S   udhcpc -S -i eth2.2 -p /etc/udhcpc/udhcpc-eth2.2.pid
 1565 root       1160 S   /storage/system/usr/sbin/dropbear -d /storage/system/
 1566 root       1032 S   -ash
Zyxmon пишет:

Посмотрите владельца (и права) папки /storage/system/etc/dropbear/

/var/tmp # ls -la /storage/system/etc/
...
drwx--x--x    2 root     root            0 Feb  6 21:53 dropbear


24

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

wince, все вроде у Вас правильно. И работает, как вижу.
По непонятной мне причине dropbear не видит rsa и dss ключи в /storage/system/etc/dropbear/
Может где очепятка, но у меня не проявляется. В логах (журнале кинетика) у меня ошибок нет.

Если найдете причину такого поведения - напишите. Архив с установкой в /storage качают, как вижу. Вы первый, кто отписался.
Если я обнаружу в чем дело - напишу тут.
Пока приведу лог кинетика - первый запуск с выполнением скриптов из storage с отключенной флешкой. В логе можно увидеть сообщения ядра и смену пароля по умолчанию:

Jan 17 00:00:09 kernel: br0: port 1(eth2.1) entering forwarding state
Jan 17 00:00:10 dropbear[1082]: Running in background
Jan 17 04:00:29 zyntp[1088]: New time offset -> 1579073.
Feb  4 10:38:22 zyntp[1088]: Set new system time.
Feb  4 10:38:28 httpd[1075]: User logged in (10.0.0.156/'Mozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0')
Feb  4 10:38:41 httpd[1075]: User logged out.
Feb  4 10:38:56 dropbear[1090]: Child connection from 10.0.0.156:51395
Feb  4 10:39:03 dropbear[1090]: Password auth succeeded for 'root' from 10.0.0.156:51395
Feb  4 10:39:14 passwd: Password for root changed by root
Feb  4 10:39:18 dropbear[1090]: Exit (root): Exited normally
Feb  4 10:39:20 dropbear[1093]: Child connection from 10.0.0.156:51398
Feb  4 10:39:26 dropbear[1093]: Password auth succeeded for 'root' from 10.0.0.156:51398


25

Re: Устанавливаем приложения во внутренюю память кинетика (мини опрос)

Zyxmon пишет:

wince, все вроде у Вас правильно. И работает, как вижу.
По непонятной мне причине dropbear не видит rsa и dss ключи в /storage/system/etc/dropbear/
Может где очепятка, но у меня не проявляется. В логах (журнале кинетика) у меня ошибок нет.

Я вынес iptables из S10dropbear в /storage/system/etc/firewall.d/fw.sh, сделал его исполняемым. S10dropbear вернул в исходное состояние, теперь ошибок dropbear нет

7 фев 16:42:28    httpd[1311]    User logged in (192.168.1.2/'Mozilla/5.0 (Windows NT 5.1; rv:10.0) Gecko/20100101 Firefox/10.0')
7 фев 16:42:47    dropbear[1322]    Child connection from 192.168.1.2:40794
7 фев 16:43:50    dropbear[1322]    Password auth succeeded for 'root' from 192.168.1.2:40794

но по-прежнему, по ssh могу соединяться только в локальной сети. Из интернета не получается.

Файл /storage/system/etc/firewall.d/fw.sh

#!/bin/sh

PORT=1022

iptables -A INPUT -p tcp --dport $PORT -j ACCEPT
iptables -t filter -A FORWARD -p tcp --dport $PORT -j ACCEPT