小米路由器3G建站折騰筆記4 - 安裝opkg和onmp

小米路由器3G建站折騰筆記1 - 引言與路由器選擇
小米路由器3G建站折騰筆記2 - 刷ROM和開啟SSH
小米路由器3G建站折騰筆記3 - 網(wǎng)站架構(gòu)選擇
小米路由器3G建站折騰筆記4 - 安裝opkg和onmp
小米路由器3G建站折騰筆記5 - 安裝phpMyAdmin、Typecho、WordPress
小米路由器3G建站折騰筆記6 - 總結(jié)

本節(jié)是路由器建站的重頭戲,掛好U盤,安裝好opkg和onmp,后面就簡單了。

六、掛載U盤

路由器內(nèi)的存儲空間有限,僅僅128M,在我裝Go程序的時候,100來M的壓縮包都不能順利解壓,所以必須通過U盤來擴展空間,把要裝的程序、數(shù)據(jù)、文檔都撞到U盤上,這樣以后想進行數(shù)據(jù)遷移和備份都很方便。

1、首先格式化U盤。

前面刷機用的是FAT格式,但是在Linux下使用的時候,不能創(chuàng)建符號鏈接,安裝opkg時出現(xiàn)問題。之后將U盤格式化為NTFS,發(fā)現(xiàn)路由器系統(tǒng)只能讀不能寫,創(chuàng)建文件則報錯:“Read-only file system”,mount命令顯示/dev/sda1 on /userdisk/usbdisk type ntfs (ro,relatime,uid=0,gid=0...),用chmod 666、mount -o remount,rw /和mount -t ntfs -w /dev/sda1 /userdisk/usbdisk也不能解決。最后格式化為ext3一切正常,但是這樣Windows下就不方便訪問了。

路由器下閹割了fdisk和mkfs命令,我是在Linux虛擬機下用mkfs.ext3格式化的,使用MiniTool分區(qū)工具也可以。

2、路由器上插入U盤,用df -h或ls /dev命令查看U盤設(shè)備為/dev/sda1。

3、創(chuàng)建路徑/userdisk/usbdisk。

4、掛載磁盤mount /dev/sda1 /userdisk/usbdisk,這樣就可以通過/userdisk/usbdisk訪問U盤;卸載命令為umount /userdisk/usbdisk,注意不是unmount。

5、實現(xiàn)開機自動掛載。

按照網(wǎng)上說的,在/etc/fstab文件中添加/dev/sda1 /userdisk/usbdisk或/dev/sda1 /userdisk/usbdisk ext3 defaults 0 0,均不能正常掛載,仔細查看/etc/fstab文件,發(fā)現(xiàn)有這么一句話:# WARNING: this is an auto generated file, please use uci to set defined filesys,看來需要用UCI(Unified Configuration Interface)命令來修改fstab才可以。

百度之后嘗試修改/etc/config/fstab文件,末尾添加以下內(nèi)容:

config 'mount'

option device '/dev/sda1'

option target '/userdisk/usbdisk'

option fstype 'ext3'

option enabled '1'

保存并重啟之后,發(fā)現(xiàn)U盤自動掛載成功,這樣就不用管UCI指令了。還有一種可行的方法是在/etc/rc.local文件里或者/etc/init.d/boot、/etc/init.d/fstab等文件的start函數(shù)中直接添加掛載命令mount /dev/sda1 /userdisk/usbdisk,經(jīng)測試都可以。

修改文件使用鼎鼎大名的vi或vim,如不會使用請自行百度。

七、安裝opkg

Opkg是OpenWrt的包管理軟件,據(jù)說之前的開發(fā)版是自帶的,現(xiàn)在需要安裝。安裝過程中需要用到/opt、/root目錄,因為這兩個目錄是一級目錄,也是限制為只讀的(Read-only file system),所以通過軟鏈接進行一下重定向。

1、首先創(chuàng)建兩個目錄/userdisk/usbdisk/opt和/userdisk/usbdisk/root。

mkdir /userdisk/usbdisk/opt

mkdir /userdisk/usbdisk/root

2、進行鏈接。

mount --bind /userdisk/usbdisk/opt /opt

mount --bind /userdisk/usbdisk/root /root

3、設(shè)置開機自動鏈接。

因為直接修改/etc/fstab無效,所以把上面兩個mount命令直接寫在/etc/rc.local文件中,這樣每次開啟路由器即可自動鏈接/opt和/root到U盤路徑。

執(zhí)行完上述準備工作后,就可以安裝opkg了,命令如下:

cd /root

wget http://pkg.entware.net/binaries/mipsel/installer/installer.sh

chmod +x installer.sh

./installer.sh

我一直很反感這種在線安裝命令,因為網(wǎng)絡(luò)總是不給力,經(jīng)常安裝失敗。我不知道apt-get、yum、pip這種命令,如果網(wǎng)絡(luò)不好該怎么辦,能否下載下來執(zhí)行呢?如有大神知曉,盼告知。根據(jù)墨菲定律,毫無疑問這次又發(fā)生了,在installer.sh執(zhí)行過程中,opkg下載.ipk 包的時候,總是無響應(yīng),安裝失敗。雖然一共也就2000多個包,400多M,雖然安裝過程中可能用不到幾個,然而我還是不清楚到底要下哪些包,下了之后如何安裝。不過我也沒放棄,我就一遍遍地重試,最后終于在網(wǎng)速較好的深夜安裝成功了。

安裝后的可執(zhí)行文件位于/opt/bin/opkg,需要設(shè)置環(huán)境變量,打開/etc/profile文件,修改export PATH=/bin:/sbin:/usr/bin:/usr/sbin為export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/opt/bin:/opt/sbin,保存即可。

最后測試一下opkg,安裝個unzip試試吧,后面要用的。

opkg update

opkg install unzip

參考資料

小米路由器3G安裝opkg指南

http://www.itdecent.cn/p/09c104eb0e70

八、安裝onmp

xzhih 的onmp一鍵安裝腳本https://raw.githubusercontent.com/xzhih/ONMP/master/oneclick.sh(https://github.com/xzhih/ONMP)真的很棒,但是路由器上wget --no-check-certificate不能下載https地址的文件,可能要用curl吧,而且raw.githubusercontent.com經(jīng)常無法訪問。我不知道之前是怎么解決這個問題的,但我依然選擇了最笨的辦法,在電腦虛擬機上下載再復(fù)制到U盤上。

主要用到的是兩個文件:

https://raw.githubusercontent.com/xzhih/ONMP/master/onmp.sh

https://raw.githubusercontent.com/WuSiYu/PHP-Probe/master/tz.php

安裝之前,先修改一下onmp.sh,刪除mariadb-server-extra,因為這個包已經(jīng)不存在了,如果不刪除,后面會報安裝錯誤,提前退出。刪除后就可以安裝了。

將onmp.sh復(fù)制到/root,執(zhí)行命令:mkdir -p /opt/onmp && chmod +x onmp.sh && ./onmp.sh打開安裝界面:

輸入1正式開始安裝。

安裝過程出現(xiàn)下面錯誤,是因為沒有php7-pecl-redis包,這個不管它了,倒是不影響安裝,不知道后面有沒有什么影響。

Collected errors:

* opkg_install_cmd: Cannot install package php7-pecl-redis.

最后出現(xiàn)的錯誤才是最惱人的:

現(xiàn)在開始初始化ONMP

cp: can't stat '/opt/onmp/tz.php': No such file or directory

=================================

onmp 管理命令

onmp open

啟動 停止 重啟

onmp start|stop|restart

查看網(wǎng)站列表 onmp list

Nginx 管理命令

onmp nginx start|restart|stop

MySQL 管理命令

onmp mysql start|restart|stop

PHP 管理命令

onmp php start|restart|stop

Redis 管理命令

onmp redis start|restart|stop

=================================

onmp正在啟動

nginx 啟動成功

php-fpm 啟動成功

mysqld 啟動失敗

onmp啟動失敗

好吧,來解決一下,關(guān)于tz.php的錯誤是最簡單的,將tz.php復(fù)制到/opt/onmp/即可,可能也要復(fù)制到/opt/wwwroot/default/,忘記了,也可能是自動的。

關(guān)于mysql的,先手動啟動一下看看,onmp mysql start,報錯:/opt/bin/onmp: line 143: /opt/etc/init.d/S70mysqld: not found,在/opt/etc/init.d/目錄沒有看到S70mysqld,但是有S70mariadbd,將S70mariadbd重命名為S70mysqld:mv /opt/etc/init.d/S70mariadbd /opt/etc/init.d/S70mysqld。

再次執(zhí)行onmp mysql start,不報錯,但是執(zhí)行onmp mysql stop卻提示mysql沒有運行。執(zhí)行mysqld --skip-grant&直接啟動mysql,報錯Can't find messagefile '/opt/share/mariadb/errmsg.sys',打開/opt/etc/mysql/my.cnf文件,將lc_messages_dir = /opt/share/mariadb改為lc_messages_dir = /opt/share/mysql。

再次執(zhí)行mysqld --skip-grant&,又報出內(nèi)存不足錯誤:

root@XiaoQiang:~/onmp# mysqld --skip-grant&

root@XiaoQiang:~/onmp# 200214? 5:59:10 [Note] mysqld (mysqld 5.5.58-MariaDB) starting as process 17793 ...

200214? 5:59:10 [ERROR] mysqld: Out of memory (Needed 130760704 bytes)

200214? 5:59:11 InnoDB: The InnoDB memory heap is disabled

200214? 5:59:11 InnoDB: Mutexes and rw_locks use InnoDB's own implementation

200214? 5:59:11 InnoDB: Compressed tables use zlib 1.2.11

200214? 5:59:11 InnoDB: Initializing buffer pool, size = 128.0M

InnoDB: mmap(136839168 bytes) failed; errno 12

200214? 5:59:11 InnoDB: Completed initialization of buffer pool

200214? 5:59:11 InnoDB: Fatal error: cannot allocate memory for the buffer pool

200214? 5:59:11 [ERROR] Plugin 'InnoDB' init function returned error.

200214? 5:59:11 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.

200214? 5:59:11 [ERROR] Unknown/unsupported storage engine: InnoDB

200214? 5:59:11 [ERROR] Aborting

200214? 5:59:11 [Note] mysqld: Shutdown complete

查看一下內(nèi)存吧:

root@XiaoQiang:~/onmp# free -m

? ? ? ? ? ? total? ? ? used? ? ? free? ? shared? ? buffers? ? cached

Mem:? ? ? ? ? 247? ? ? ? 193? ? ? ? 54? ? ? ? ? 0? ? ? ? 12? ? ? ? 102

-/+ buffers/cache:? ? ? ? 78? ? ? ? 168

Swap:? ? ? ? ? ? 0? ? ? ? ? 0? ? ? ? ? 0

Swap分區(qū)為0,據(jù)說啟用swap就能解決報錯,但是在啟用swap時出現(xiàn)問題,swapon失?。簊wapon failed: Function not implemented

dd if=/dev/zero of=/opt/.swap bs=1024k count=20 20M大小

mkswap /opt/.swap

swapon /opt/.swap

關(guān)閉并刪除swap文件,swapoff同樣報錯:swapoff failed: Function not implemented

swapoff /opt/.swap

rm /opt/.swap

看來小米路由器不支持開啟swap,那么把mysql緩存改小試試。

打開/opt/etc/mysql/my.cnf文件,在[mysqld]下添加innodb_buffer_pool_size = 8M,其它的24M也改為8M,保存后再次啟動mysql。發(fā)現(xiàn)mysql運行成功,提示“mysqld: ready for connections.”,“InnoDB: mmap(136839168 bytes) failed; errno 12”錯誤沒了,“mysqld: Out of memory (Needed 130760704 bytes)”有時還在。netstat -ntlp|grep 3306查看3306端口已經(jīng)開啟,不管了,先這樣吧,關(guān)閉mysql的命令是killall mysqld。

初始化數(shù)據(jù)庫:/opt/bin/mysql_install_db --user=root --basedir=/opt --datadir=/opt/var/mysql/

啟動數(shù)據(jù)庫:/opt/etc/init.d/S70mysqld start

設(shè)置數(shù)據(jù)庫密碼:mysqladmin -u root password 123456

測試下數(shù)據(jù)庫連接:mysql -u root -p

以上命令均成功,最后重啟一下onmp看看能夠正常啟動:

root@XiaoQiang:~/onmp# onmp restart

onmp正在重啟

nginx 啟動成功

php-fpm 啟動成功

mysqld 啟動成功

onmp已啟動

網(wǎng)站列表:

/opt/wwwroot/default/? ? ? ? 192.168.31.1:81

瀏覽器地址欄輸入:192.168.31.1:81 查看php探針

終于全部啟動了,瀏覽器輸入http://192.168.31.1:81打開探針看看,顯示了很多服務(wù)器的信息。探針下面有個MySQL數(shù)據(jù)庫連接檢測,輸入root和123456,點擊“MySQL檢測”居然檢測失敗,報出服務(wù)器不支持MySQL數(shù)據(jù)庫。頭疼,上面明明寫了數(shù)據(jù)庫為5.5.58-MariaDB,下面卻檢測不到,不會探針有問題吧,簡單分析了一下,還真是探針的問題,在檢測的時候只判斷了mysql_close,沒判斷mysqli_close,虛驚一場。

好了,把onmp添加到開機自啟動里面去吧,打開/etc/rc.local,添加下列命令即可,搞定onmp,剩下的事就簡單多了。

export PATH=/opt/sbin:/opt/bin:$PATH

onmp start

參考資料

自己安裝ONMP,安裝過程和mysql出錯解決辦法

https://www.right.com.cn/forum/thread-1137597-1-1.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容