OpenWRT em Mikrotik Routerboard 750 (Linux on MIPS AR7xxx/AR9xxx)

De Wiki Hackstore

Descrição

Instalação de Linux OpenWRT com imagem personalizada em hardware Mikrotik de arquitetura MIPS

# cat /proc/cpuinfo 
system type             : Atheros AR7241 rev 1
machine                 : MikroTik RouterBOARD 750
processor               : 0
cpu model               : MIPS 24Kc V7.4
BogoMIPS                : 265.42
wait instruction        : yes
microsecond timers      : yes
tlb_entries             : 16
extra interrupt vector  : yes
hardware watchpoint     : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]
isa                     : mips1 mips2 mips32r1 mips32r2
ASEs implemented        : mips16
shadow register sets    : 1
kscratch registers      : 0
package                 : 0
core                    : 0
VCED exceptions         : not available
VCEI exceptions         : not available

Requisitos

Pacotes e requisitos para compilação cruzada

OpenSUSE:

zypper install asciidoc bash bc binutils bzip2 fastjar flex git-core gcc-c++ gcc util-linux gawk gtk2-devel intltool jikes zlib-devel mercurial make genisoimage ncurses-devel libopenssl-devel patch perl-ExtUtils-MakeMaker python-devel rsync ruby sdcc unzip wget gettext-tools libxslt-tools zlib-devel subversion zlib-devel-static

Gentoo/Funtoo:

echo \
    app-arch/{bzip2,fastjar,sharutils,unzip,zip} \
    app-text/asciidoc dev-java/{icedtea:7,jikes,oracle-jdk-bin} \
    dev-libs/{libusb-compat,libxslt,openssl} dev-util/intltool \
    dev-vcs/{git,mercurial} net-misc/{rsync,wget} \
    net-wireless/b43-fwcutter sys-apps/{gawk,util-linux} \
    sys-devel/{bc,bin86,binutils,dev86,flex,gcc[gcj],gettext} \
    sys-libs/{ncurses,zlib} virtual/{cdrtools,perl-ExtUtils-MakeMaker} \
    x11-libs/gtk+:2 \
        | sed 's/\s/\n/g' \
            | sort \
                | sudo tee /etc/portage/sets/openwrt-prerequisites \
                    && sudo emerge -DuvNa '@openwrt-prerequisites'



Obtenha os códigos fonte

Obteha a última versão:

# svn co svn://svn.openwrt.org/openwrt/trunk/

# mv trunk/ openwrt-mk-750 ; cd openwrt-mk-750


Crie um usuário:

# useradd raphael -m -gusers

Dê permissão de acesso no diretório ao novo usuário:

# chown raphael. -R /opt/openwrt-mk-750


Lembre-se de sempre gerar as imagens como usuário comum para evitar problemas em seu sistema nativo, e também por boas práticas de segurança. Nunca é boa idéia usar ROOT para essa finalidade.


Prepare uma imagem Ramdisk do OpenWRT

# make menuconfig

Antes de selecionar suas opções preferidas de software, defina as opções do hardware:

Target System: Atheros AR7xxx/AR9xxx

Subtarget: Mikrotik devices with NAND flash

Configure OpenWRT para gerar o Ramdisk

Target Images: ramdisk

Compile

# make

OBS: Caso ocorram erros ou seja necessário debugar, utilize -j1 V=s


Prepare uma imagem Target do OpenWRT

# make menuconfig


Configure OpenWRT para gerar a imagem (stage4)

Target Images: tar.gz

Após selecionar a opção tar.gz, configure OpenWRT de acordo com suas necessidades, ativando ou desativando pacotes diversos.

Compile

# make

OBS: Caso ocorram erros ou seja necessário debugar, utilize -j1 V=s

Envie a imagem para o routerboard

Instale os requisitos

OpenSUSE:

# zypper in atftp

Gentoo/Funtoo:

# emerge net-ftp/atftp


Configure o servidor TFTP

# vi /etc/sysconfig/atftpd
ATFTPD_USER="tftp"

ATFTPD_GROUP="tftp"

ATFTPD_OPTIONS=""

ATFTPD_USE_INETD="no"

ATFTPD_DIRECTORY="/srv/tftpboot"

ATFTPD_BIND_ADDRESSES=""


Crie o arquivo de xinetd:

# vi /etc/xinetd.d/tftp
# default: off
# description: tftp service is provided primarily for booting or when a \
# router need an upgrade. Most sites run this only on machines acting as
# "boot servers".
{ 
        socket_type             = dgram 
        protocol                = udp 
        wait                    = yes 
        flags                   = IPv4 
        user                    = root 
        server                  = /usr/sbin/in.tftpd 
        server_args = /etc/xinetd.d/tftpboot
#       per_source              = 11 
#       cps                     = 100 2 
        disable = no 
}


Crie um script para iniciar o serviço do TFTPD:

#!/bin/bash

source /etc/sysconfig/atftpd
/usr/sbin/atftpd --user $ATFTPD_USER --group $ATFTPD_GROUP $ATFTPD_OPTIONS $ATFTPD_DIRECTORY --daemon

Dê permissão e execute:

chmod +x start-tftpd.sh ; ./start-tftpd.sh


Após isso, copie os arquivos de imagem gerados para o diretório do TFTPD:

cp /opt/openwrt-mk-750/bin/ar71xx/openwrt-ar71xx-mikrotik-vmlinux-initramfs.elf /srv/tftpboot/


Configure o servidor DHCP

# vi /etc/dhcpd.conf
allow booting;
allow bootp;
 
subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.10 192.168.1.200;
}
 
host routerboard {
  hardware ethernet 4c:5e:0c:cd:83:f0;
  fixed-address 192.168.1.100;
  next-server 192.168.1.2;
  filename "openwrt-ar71xx-mikrotik-vmlinux-initramfs.elf";
}

Configure a interface de rede ao qual o servidor DHCP usará para propagar os pacotes no broadcast:

# vi /etc/sysconfig/dhcpd

DHCPD_INTERFACE="enp4s0"


Carregando a imagem Ramdisk (boot) para o Routerboard 750

Este procedimento é bem prático, e semelhante a idéia de "dar um boot" com um LiveCD em qualquer PC convencional. Para dar boot via TFTP no RouterBOARD Mikrotik:

1- Conecte um cabo de rede à porta 1 do RouterBoard à placa de rede no servidor DHCP/TFTP

2- Agora pressione e segure o botão "RESET" do roteador e somente após isso conecte o cabo de alimentação. Ambos os LEDs (PWR e ACT) piscarão constantemente, mantenha o botão "RESET" pressionado.

3- Depois de alguns segundos, o LED "ACT" começará a piscar, mantenha pressionado. Depois de mais alguns segundos, o LED "ACT" desligará, e então você poderá parar de pressionar o botão "RESET". O router irá agora tentar obter um endereço IP via DHCP/BOOTP e se for bem sucedido irá efetuar o download e inicializará a imagem Ramdisk gerada anteriormente. Você poderá ver esta atividade em tempo real acompanhando os arquivos de log visto que este modelo de routerBOARD não possui porta serial para saída de tela em minicom:

# tail -f /var/log/messages


Referências:

http://wiki.openwrt.org/doc/howto/buildroot.exigence
https://blog.poettner.de/2011/05/27/openwrt-trunk-on-mikrotik-routerboard-411750/