OpenWRT インストール中 (ビルド ver.)

# OpenWRT 自己ビルド version

Raspberry Pi初代のopkgのサポート状況がさみしいので、自分でビルドする環境を整えてみた。

# OpenWRT ビルド中


[ここ(Quick Image Building Guide)](https://openwrt.org/docs/guide-developer/quickstart-build-images)に従って、進めれば入ります。
https://openwrt.org/docs/guide-developer/quickstart-build-images

## セットアップ@ホスト環境

書かれているまんま

```
$ sudo apt install subversion g++ zlib1g-dev build-essential git python python3
$ sudo apt install libncurses5-dev gawk gettext unzip file libssl-dev wget
$ sudo apt install libelf-dev ecj fastjar java-propose-classpath
$ sudo apt install build-essential libncursesw5-dev python unzip 
```

## ビルド@ホスト環境

必要なパッケージをダウンロードします。(まんまですが、やらないとLuciが入らないというはまりモードになるので重要)

```
cd openwrt
./scripts/feeds update -a
./scripts/feeds install -a
```

menuconfigを開いて、環境を整えます。

```
$ make menuconfig
```

初代Raspberry Piの肝はこのあたり

```
CONFIG_TARGET_brcm2708=y
CONFIG_TARGET_brcm2708_bcm2708=y
CONFIG_TARGET_brcm2708_bcm2708_DEVICE_rpi=y
```

あと、うちのWiFiは、rtl8192cuなので、そのドライバもあわせて設定

```
CONFIG_PACKAGE_rtl8192cu-firmware=y
```

save --> exit して、いよいよビルド。


うちの環境では、make -j 8するとエラーになるので、おとなしくj 1でビルド
また、ビルドしている感を出したいので、 V=scも追記

```
$ make -j 1 V=sc
```


#OpenWRT インストール中

ただ、sd cardに焼き付ければOK
モノは、bin/targets/brcm2708/bcm2708の配下にある

```
$ sudo dmesg | tail <-- /dev/sdxの確認
$ zcat openwrt-brcm2708-bcm2708-rpi-ext4-factory.img.gz | sudo dd of=/dev/sdx conv=fsync bs=1M status=progress
```

一度起動してしまえば、sysupgrade.img.gzを利用して、GUIからアップグレード可能


#OpenWRT 起動

メモリカードをraspberry piへ差し込めばOK!!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213097/c47e583b-a8f2-61fc-c271-642c74e6ed44.png)

なぜか、日本語で登場。英語verのブラウザで見ると、英語で表示されます。--> システム->システムで、自動になっているから。固定したければ、好きな言語を選択すべし。

なお、LuCiを使うためには、menuconfigで、luci関連を選択する必要あり


# パッケージの追加

opkgを使わない、opkgにない、パッケージも入れることができます。
たとえば、ad block。raspberry piのopkgにはでてきません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213097/99a67001-bbbb-d174-1f1f-ee2ba2e693c3.png)

"make menuconfig"にて、好きなパッケージを選択して、<M>とすれば、ipkが作られます。

```
$ ls bin/packages/arm_arm1176jzf-s_vfp/packages
Packages
Packages.gz
Packages.manifest
Packages.sig
adblock_3.8.10-1_all.ipk <--これが追加
arp-scan-database_1.9.6-1_arm_arm1176jzf-s_vfp.ipk
cgi-io_14_arm_arm1176jzf-s_vfp.ipk
libattr_2.4.48-2_arm_arm1176jzf-s_vfp.ipk
libdb47_4.7.25.4.NC-5_arm_arm1176jzf-s_vfp.ipk
libopenssl-afalg_sync_1.0.1-1_arm_arm1176jzf-s_vfp.ipk
libxml2_2.9.9-4_arm_arm1176jzf-s_vfp.ipk
```

このipkをLuCiのソフトウェア画面から登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213097/efc255c2-5b8c-412b-061b-931f1d179515.png)


インストール済のタブから、インストールされたことが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213097/a8d7c7c9-f690-0ed9-2838-4d42b3c3d31e.png)

adblockを動かすには、次のモジュールも必要でした。
- luci-app-adblock
- luci-compat

app-adblockを入れようとすると、luci-compatがない、と怒られるので、気づきます。

#おまけ
## SD Cardサイズをアップする

ビルドでは、デフォルトでは、104MBの領域を確保しています。これをsd cardの最大領域までアップするには、以下の手順が必要です。

```
$ sudo parted /dev/sdx
(parted) resizepart 2      ; /dev/sdx2が対象。sdx1はboot
(parted) -0                ; "-0"指定で、最大領域の確保
(parted) quit
$ sudo e2fsck -f /dev/sdx2
$ sudo resize2fs /dev/sdx2
```


##追記#1
ソフトウェアをアップグレードする際は、\*sysupgrade.img.gzを指定します。
~~この際、 **gz** をつけないと、XHR request timed outなるエラーが発生します。要注意です。~~
ファイルの転送速度が遅すぎると、タイムアウトするようです。gzのファイルでも、buildサーバのSMBから転送しようとしたら、しばしば同じエラーが発生しました。最終的に、最寄りのサーバ(つまりweb操作をしているPC)から転送したら、今のところ100% OKです。


[おしまい]