LINUX.ORG.RU

D-Link - как заменить /etc/config.xml (cannot create /etc/config.xml: Read-only file system) ?


0

0

Здравствуйте!

Решил я упростить себе жизнь, и настроить на D-LINK 300T переключение между сетями скриптами. (У меня такой D-Link с Intel-биосом, который перепрошивке не поддается).

Впринципе, нужно всего лишь заменить VCI 35 на VCI 37 и перезапустить модем.

Искал-искал, есть ли в консоли модема команды, которые устанавливают нужный VCI. Вроде оказалось, что нет. Вся настройка идет через /etc/config.xml.

Написал с помощью expect скрипт, который выдергивет config.xml из модема. С помощь sed заменяю в <vci>35</vci> на <vci>37</vci>. И этот новый конфиг нужно залить в модем.

Вот тут происходит ошибка. При любых попытках поменять /etc/config.xml, получаю ошибку

-----8<----- # cat "Hello D-Link" > /etc/config.xml cannot create /etc/config.xml: Read-only file system -----8<-----

Вот. И теперь не могу понять, что делать дальше. Знаю, что как-то можно заменить конфиг. Ведь каким-то образом веб-сервер в модеме может менять /etc/config.xml. Но как он это делает? Как сделать аналогично?

Или может быть есть какой-то другой путь прописать нужный VCI?


Блин лор как обычно удобством не блещет

-----8<-----
# cat "Hello D-Link" > /etc/config.xml
cannot create /etc/config.xml: Read-only file system
-----8<-----

xintrea
() автор топика

Есть подозрение, что можно содержимое конфига протолкнуть в /dev/ticfg.

Так ли это?

Если я сначала помещу новый config.xml в /var/tmp, а потом дам команду

# cat /var/tmp/config.xml > /dev/ticfg

то заменится ли конфиг?

xintrea
() автор топика

http://mcmcc.bat.ru/dlinkt

раньше вот тут были утилиты по модификации прошивок длинк модемов серии Т
и какие то faq
cейчас сайт не работает, но может где то в сети еще можно найти , или сам mcmcc куда-то переехал с своим сайтом

впрочем есть вариант не мучиться с конфигом , а просто запускать скрипты через telnet прямо на модеме. с помощью nc (netcat) например

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

ps: насколько я помню, конфиг там хранится на отдельном разделе флешки

cама флешка делится на 4 части
ядро, фс, конфиг и adam

была программка для распаковки конфиг части прошивки, потом можно было отредактировать, запаковать и залить, было у mcmcc

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

> насколько я помню, конфиг там хранится на отдельном разделе флешки
> cама флешка делится на 4 части

> ядро, фс, конфиг и adam

> была программка для распаковки конфиг части прошивки, потом можно

> было отредактировать, запаковать и залить, было у mcmcc


Так и есть, там 4 раздела /dev/mtdblock/0...3

Раздел /dev/mtdblock/3 состоит из двух частей - область ENVIROMENT переменных и конфиг.

Считается, что девайс /dev/ticfg - это "надстройка" над /dev/mtdblock/3, и позволяет получить только область конфига. Проблема в том, что запись в девайс /dev/ticfg невозможна.

Единственное, куда возможна запись - это напрямую в /dev/mtdblock/3.

Я проверил так

cat /dev/mtdblock/3 > tmp_mtdb3.bin
cat tmp_mtdb3.bin > /dev/mtdblock/3

ошибок не выдает, модем после перезагрузки продолжает работать.


Теперь мне нужно уметь сформировать образ /dev/mtdblock/3 и каким-то образом запихивать в модем. Я написал скрипт, который может выдёргивать образ /dev/mtdblock/3 _через_консоль_ в мой линух. А в линухе я могу изменить в образе что угодно.

Проблема теперь в том, как залить образ _через_консоль_ обратно в модем. Вот этого сделать немогу, так как консоле модема плохеет, когда в неё впечатываются бинарные данные. Отдельно конфиг могу залить (так как он ASCII), а образ немогу.

А нужно то всего лишь склеить первую часть файла образа с конфигом!

Если бы в модеме был sed, я б вообще не парился, выдрал образ в файл, заменил <vci>35</vci> на <vci>37</vci> и залил обратно.

Если бы в модеме был хотя бы head, я бы выдрал образ в файл, оставил бы только первую часть из 5688 байт, и потом через cat приклеил бы конфиг.

Но блин ничего этого в модеме нет.

Есть возможность заливать сформированный образ в модем через wget. Но! Этого как раз я делать не хочу. Потому что нужно тогда держать ftp на компе, а я его могу и отключить. И нужно тогда наворачивать логику, чтоб проверять есть ли ftp или нет, чтоб пустышку не залить случайно. В общем, с wget не хочу делать, хотелось бы одной консолью обойтись.


Вопрос - как бы извратится, чтоб командами модема укоротить бинарный файл образа до нужного размера? Остальное уже дело техники.

xintrea
() автор топика
Ответ на: комментарий от Sylvia

D-Link 300-T

Built-in commands:
-------------------
. : bg break builtin cd chdir continue eval exec exit export
false fc fg hash help jobs kill local pwd read readonly return
set setvar shift times trap true type ulimit umask unset wait


PS: Блин, ну ведь как-то вебсервер сохраняет заливаемый конфиг! Может есть какая-то встроенная программа?

xintrea
() автор топика
Ответ на: комментарий от Sylvia

Заливка config.xml в модеме делается через форму

<form name="Configuration" method="POST" action="../cgi-bin/firmwarecfg" enctype="multipart/form-data" id="uiPostUpdateConf">

может, можно как-то сформировать командную строку с вызовом firmwarecfg, чтобы залить конфиг?

xintrea
() автор топика
Ответ на: комментарий от xintrea


>какая-то встроенная программа


cm_cli
cm_logic


к сожалению проприетарные и недокументированные, если только отреверсить

поддержка длинк на dlink.ru не даст справки мотивируя тем что во первых устройство снято с производства, во вторых что подобные технические подробности для soho устройств они не дают (это официальная позиция)

в подробностях устройства прошивки Вы уже лучше меня разобрались,,,

Sylvia ★★★★★
()
Ответ на: комментарий от xintrea

secure copy

работает через ssh

в модеме ssh есть (dropbear) , но я не вижу смысла, т.к. фс все равно read only
так что оно не поможет, по записи там только открыта /var кажется

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

>cat /dev/mtdblock/3 > tmp_mtdb3.bin >cat tmp_mtdb3.bin > /dev/mtdblock/3

вот как автор ТС это провернул? tmp_mtdb3.bin скидывался в /tmp? вот точно также скриптом с хоста и заливать на модем в /tmp, а оттуда уже в /dev/mtdblock/3

z0D5e8n7x_2
()
Ответ на: комментарий от Sylvia

> secure copy
> работает через ssh

> в модеме ssh есть (dropbear)


Блин, как подключиться по SSH ?

# ssh 192.168.1.1
ssh: connect to host 192.168.1.1 port 22: Connection refused


xintrea
() автор топика
Ответ на: комментарий от z0D5e8n7x_2

>> cat /dev/mtdblock/3 > tmp_mtdb3.bin
>> cat tmp_mtdb3.bin > /dev/mtdblock/3


> вот как автор ТС это провернул? tmp_mtdb3.bin скидывался в /tmp? вот точно также скриптом с хоста и заливать на модем в /tmp, а оттуда уже в /dev/mtdblock/3


Всё так. Вопрос в том как по SSH в модем зайти?

xintrea
() автор топика
Ответ на: комментарий от Sylvia

у меня не 300Т правда, но тоже Т-шка

$ ssh -l root gw
root@gw's password:


BusyBox v0.61.pre (2007.12.25-07:27+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

# ps x
PID Uid VmSize Stat Command
1 root 1284 S init
2 root S [keventd]
3 root S [ksoftirqd_CPU0]
4 root S [kswapd]
5 root S [bdflush]
6 root S [kupdated]
7 root S [mtdblockd]
28 root 2792 S /usr/bin/cm_pc
29 root 1656 S /usr/sbin/diap
31 root 1284 S init
32 root 3788 S /usr/bin/cm_logic -m /dev/ticfg -c /etc/config.xml
53 root 1180 S /usr/sbin/thttpd -g -d /usr/www -u root -p 80 -c /cgi-bin/*
114 root 608 S /usr/bin/cm_klogd /dev/klog
115 root 700 S /sbin/dproxy -c /etc/resolv.conf -d
124 root 660 S /usr/sbin/ddnsd
240 root 2672 S /usr/sbin/pppd
268 root 700 S /usr/sbin/udhcpd /var/tmp/udhcpd.conf
408 root 2280 R /usr/sbin/dropbear
409 root 1288 S -sh
410 root 1284 R ps x
# Connection to gw closed.

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

> ps x
> там есть dropbear ?


Нет. И в /sbin, и в /usr/sbin файликов с таким именем нет.

xintrea
() автор топика
Ответ на: комментарий от Sylvia

В модеме оказывается есть dd.

Им можно отрезать кусок файла.

xintrea
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.