Залізо → Встановлення і налаштування OpenWrt на TP-Link WR1043ND

TL-WR1043ND

Нещодавно став власником роутера TP-Link WR1043ND. Обрав саме його, так як на нього можна без проблем встановити OpenWrt, а також присутній USB порт. Одразу вирішив прошивати, благо описів в інтернетах є багато. Спершу поставив backfire версію і почав конфігурування, але виявилося, що там надто старі пакети… Зокрема виникла проблема з samba сервером (не підтримує NTLMv2). Отож, нижче буде короткий опис, що і як я налаштовував. Зберу все в одному місці, аби потім знову не шукати.

Встановлення OpenWrt

Отже, якщо на роутері встановлена прошивка від виробника, потрібно:

  1. Відкотитися на стару версію (wr1043nv1_de_3_9_17_up_boot) стокової прошивки. У останніх заводських версіях додано зміни в бутлоадер, й після прошивки OpenWrt, WAN порт буде постійно виключеним. Можна почитати тред на linux.org.ru.
  2. Завантажити потрібну версію прошивки (я використовував openwrt-ar71xx-generic-tl-wr1043nd-v1-squashfs-factory.bin). Звірити md5 хеш.
  3. System Tools – Firmware Upgrade, вибрати файл та примінити.
  4. Дочекатися перезавантаження.

Оновлення з Backfire до Attitude Adjustment

Це якраз мій випадок, ібо я вже встановив Backfire. Загалом можна завантажити factory прошивку, та оновитися через веб інтерфейс, але я зробив інакше.

  1. Конектимось до роутера по SSH.
  2. Командою free перевіряємо чи у нас достатньо вільної пам’яті (оперативної), щоб записати в неї прошивку.
  3. Якщо пам’яті не достатньо
    Видаляємо opkg пакети:

     rm -r /tmp/opkg-lists/

    Підчищаємо кеш:

     echo 3 > /proc/sys/vm/drop_caches

    Видаляємо wi-fi модулі:

    rm /etc/modules.d$/*80211*
    rm /etc/modules.d$/*ath9k*
  4. Додаємо в /etc/sysupgrade.conf файли і каталоги які повинні бути збережені при оновленні, я не додавав нічого.
  5. Завантажуємо файл прошивки і md5 сум (я ставив rc1, згодом вона стане релізною):
    cd /tmp
    wget http://downloads.openwrt.org/attitude_adjustment/12.09-rc1/ar71xx/generic/openwrt-ar71xx-generic-tl-wr1043nd-v1-squashfs-sysupgrade.bin
    wget http://downloads.openwrt.org/attitude_adjustment/12.09-rc1/ar71xx/generic/md5sums
  6. Перевіряємо чи скачаний файл не пошкоджений:
     md5sum -c md5sums

    Результат повинен бути на зразок: ARNING: 195 of 196 computed checksums did NOT match

  7. Прошиваємося:
     sysupgrade -v /tmp/openwrt-ar71xx-generic-tl-wr1043nd-v1-squashfs-sysupgrade.bin
  8. Все закінчується автоматичним перезавантаженням.

Налаштовуємо кнопку QSS для чогось корисного

В файлі /etc/hotplug2.rules забираємо символ ^ перед button, зразок:

$include /etc/hotplug2-common.rules

SUBSYSTEM ~~ (^net$|^input$|button$|^usb$|^ieee1394$|^block$|^atm$|^zaptel$|^tty$) {
	exec /sbin/hotplug-call %SUBSYSTEM%
}

DEVICENAME == watchdog {
	exec /sbin/watchdog -t 5 /dev/watchdog
	next-event
}

Далі

mkdir -p /etc/hotplug.d/button
touch /etc/hotplug.d/button/buttons

У файлі /etc/hotplug.d/button/buttons пишемо:

#!/bin/sh
. /etc/functions.sh
do_button () {
        local button
        local action
        local handler
        local min
        local max

        config_get button $1 button
        config_get action $1 action
        config_get handler $1 handler
        config_get min $1 min
        config_get max $1 max

        [ "$ACTION" = "$action" -a "$BUTTON" = "$button" -a -n "$handler" ] && {
                [ -z "$min" -o -z "$max" ] && eval $handler
                [ -n "$min" -a -n "$max" ] && {
                        [ $min -le $SEEN -a $max -ge $SEEN ] && eval $handler
                }
        }
}

config_load system
config_foreach do_button button

Виконуємо наступні команди:

uci add system button
uci set system.@button[-1].button=wps
uci set system.@button[-1].action=released
uci set system.@button[-1].handler='logger Timed pressed: 0-3s'
uci set system.@button[-1].min=0
uci set system.@button[-1].max=3
uci add system button
uci set system.@button[-1].button=wps
uci set system.@button[-1].action=released
uci set system.@button[-1].handler='logger Timed pressed: 5-10s'
uci set system.@button[-1].min=5
uci set system.@button[-1].max=10
uci commit system

wps це назва кнопки, щоб перевірити як вона точно зветься, можна в скріпт /etc/hotplug.d/button/buttons прописати:

#!/bin/sh
logger Action: $ACTION Button: $BUTTON Seen: $SEEN

й натиснути кнопку. Після цього виконати logread і подивитися назву кнопки.

Рядок handler може бути командою чи шляхом до скріпта, що повинен виконатися. З даними налаштуваннями, кнопка виконуватиме різні дії, в залежності чи її натиснули коротко (від 0 до 3 секунд), чи утримували довго (від 5 до 10 секунд).

Змінюємо порт стандартного веб інтерфейсу

В файлі /etc/config/uhttpd заміняємо

list listen_http        0.0.0.0:80

на

list listen_http        0.0.0.0:81

Встановлюємо веб сервер

Напевно це трохи збочення, ставити веб сервер на роутер (процесор не сильно потужний, пам’яті взагалі мізер), але для чогось дуже маленького — підійде.

Встановлюємо PHP5

opkg update
opkg install libsqlite3
opkg install php5-fastcgi
# якщо плануєте використовувати сесії
opkg install php5-mod-session

У файлі /etc/php.ini можна змінити налаштування часового поясу, наприклад так

date.timezone = "Europe/Kiev"

Далі виконуємо php-cgi -v й перевіряємо, щоб не було ніяких помилок.

Встановлення самого lighttpd

opkg install lighttpd
opkg install lighttpd-mod-fastcgi
opkg install lighttpd-mod-simple-vhost

У файлі /etc/lighttpd/lighttpd.conf активуємо модулі

server.modules = (
#       "mod_rewrite",
#       "mod_redirect",
#       "mod_alias",
#       "mod_auth",
#       "mod_status",
#       "mod_setenv",
        "mod_fastcgi",
#       "mod_proxy",
        "mod_simple_vhost",
#       "mod_cgi",
#       "mod_ssi",
#       "mod_usertrack",
#       "mod_expire",
#       "mod_webdav"
)

Задаємо, які файли вважати індексними

index-file.names = ( "index.php", "index.html", "default.html", "index.htm", "default.htm" )

За замовчуванням server.port стоятиме 80, нічого міняти не потрібно, бо раніше ми уже перемістили веб морду роутера на інший порт.

Наступні налаштування подружать php і lighttpd

fastcgi.server = (
        ".php" => (
                "localhost" => (
                        "socket" => "/tmp/php-fastcgi.socket",
                        "bin-path" => "/usr/bin/php-fcgi",
                        "max-procs" => 2,
                        "idle-timeout" => 20
                )
        )
)

max-procs — наразі не працює, треба буде розібратися.

Помітив, що по замовчуванню сервер працює від імені root, це як мінімум дивно і взагалі не правильно! Розкоментовуємо рядки

server.username = "www-data"
server.groupname = "www-data"

Замість www-data додайте свого користувача і групу.

Корисні лінки

  1. Автодом Домашняя автоматизация (багато корисних статей про OpenWrt).
  2. Восстановление роутеров TP-Link через serial интерфейс.на примере TL-WDR4300ND и WR1043ND.
  3. OpenWrt Wiki.
26.03.2013 22:19 Автор: Strange_V Хіти: 4435

Пінгбеки заборонені, лише коментарі.

Один комментар

Напишіть відгук