功能:
1.Docker下跑openwrt, 测试用 ✔
2.文件共享服务器 ✅ (实现功能, 但性能极差)
3.DLNA服务器 ✔
4.Docker下跑wordpress服务器(hugo?)
5.小型linux服务器 ✔
......
操作
一、在TV box(R3300L, S905L)上安装Armbian
1.制作启动TF卡
Armbian On TV Box原作者发布贴:
原作者最新的(bonic)镜像经测试, 在R3300L上, 要么卡Start Kernel, 要么黑屏。
最新的可用稳定版本: Armbian_5.9.7_Aml-g12-ubuntu_bionic_5.3.0_20190923.img.xz
卡刷后, 修改env.txt, dtb文件选择文件名有212那个(有网卡, 无wifi)
注: Armbian初始用户/密码: root/1234
2. 启动后操作, 重新调整启动TF卡分区
TF卡第一次启动后,会自动扩展主要分区, 占用全部空间,因为想做文件服务器, 因此需要修改主要分区, 把部分空间分给exfat分区。
Armbian装TF卡上, 有两个分区, 128M*1 + 1.2G*1.
第一次启动时, 系统会自动扩展第二个分区, 会占满整个TF卡
希望留一块空间是windows能读写的(考虑exfat格式), 即使系统坏了, 数据还能读.
无损调整EXT4分区大小
操作:
先等系统启动自动完成扩展.
关机, 拿出卡, 插到另一个linux(ubuntu类最好)机器上, 不做启动分区(不需要一直mount上), 启动linux.
# 看分区
# lsblk
# 检查需要调整的分区
# e2fsck -f /dev/sda2
# 调整分区文件系统到5G. 注意: 需要配合下一步才能生效 _ 这里应该只是把用到的空间都挪到前面5G的空间去了, 但没有实际调整分区大小
# resize2fs /dev/sda2 5G
# 进fdisk, 先删除sda2, 再重建5G大小的sda2
# fdisk /dev/sda
# 删除原sda2
(command): d
(command): 2
# 新建5G大小的sda2
(command): n # 新建
(command): 2 # 第2分区
(command): Sectors位置, sda1 End+1 # 起始sectors位置
(command): +5G # 大小, 或结果secotrs位置: 这里写的是大小, 以+开始, +后面是要划分的空间大小(5G)
(command): 发现ext4签名, 是否删除: N 不删除
# 顺便把exfat分区也建上...
...
(command): w # 写盘退出
# 再检查一下,没有错误就说明没问题了
# e2fsck -f /dev/sda2
结果: 成功
先在windows上格式化了exfat分区, 读写没问题.
然后用这张卡启动linux正常, 用fdisk看分区也正常.
注1: 处理不能使用上述方法调整分区的情况
情况描述:
有一张128G的卡, 完成armbian第一次启动,系统自动扩展主分区到占满整张卡后,用另一张TF卡启动到Armbian, 把128G卡插到机器上, 试图用e2fsck+resize2fs命令调整分区, 但系统报错说该该已加载,不能完成上述命令.
考虑到这张卡只用了一次,后面要分出来的空间应该还没有用到, 因此就用fdsik强行重新分区, 并且不格式化调整小的分区,希望能行.
但完成后用这张卡重启,启动失败,不能进入系统.
调整分区失败.
处理方式(试):
用一张小点的TF卡做armbian系统,完成后用这张卡启动,完成分区调整.
再把这张卡用USB Image Tool 写U盘镜像工具复制到128G的卡中(从小卡上备份到文件, 在大卡上从文件恢复),这样系统会占用8G的空间,剩余的空间用fdisk(armbian上)分区成extfat,再到Windows上格式化为exfat就ok.
注2: 让Armbian挂载exfat磁盘
情况描述: Armbian缺省安装不包括exfat支持,需要如下操作安装
# 更新软件包信息
# apt-get update
# 查找exfat相关包名
# apt-cache search exfat
# 安装exfat支持
# apt-get install exfat-fuse exfat-utils
# 安装完成后, 即可手动挂载
# 建立挂载点
# mkdir /mnt/mmcblk0p3
# 挂载
# mount -t exfat /dev/mmcblk0p3 /mnt/mmcblk0p3/
注3: 让Armbian系统启动时自动挂载exfat磁盘
情况描述: Armbian启动时不会自动挂载exfat磁盘, 需要修改/etc/fstab文件
# 取需要挂载的exfat设备uuid
# blkid /dev/mmcblk0p3
/dev/mmcblk0p3: UUID="FAAE-B3A5" TYPE="exfat" PARTUUID="de8d9e8d-09"
# 修改自动挂载配置文件/etc/fstab
# vim /etc/fstab
# 在最后增加
UUID="FAAE-B3A5" /mnt/mmcblk0p3 exfat defaults 0 0
# 其中
# 第1列:磁盘装置文件名或该装置的 Label
# 第2列:Mount point 设备的挂载点,就是你要挂载到哪个目录下
# 第3列:filesystem 磁盘文件系统的格式
# 第4列:文件系统参数 parameters
# 第5列:能否被 dump 备份命令作用
# 第6列:是否以 fsck 检验扇区
配置完成后重启确认可以正常挂载.
注: 当前R3300L的Blk情况:
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
mmcblk0 179:0 0 119.3G 0 disk
|-mmcblk0p1 179:1 0 128M 0 part /boot
|-mmcblk0p2 179:2 0 7.3G 0 part /
`-mmcblk0p3 179:3 0 111.8G 0 part /mnt/ext
mmcblk1 179:32 0 7.3G 0 disk
mmcblk1boot0 179:64 0 4M 1 disk
mmcblk1boot1 179:96 0 4M 1 disk
zram0 253:0 0 50M 0 disk /var/log
zram1 253:1 0 400.5M 0 disk [SWAP]
* mmcblk1是内置的EMMC存储
3. 配置Armbian
系统提供armbian-config工具, 功能很丰富, 多数设置可以在这里完成
主要是修改网络配置, 配置时区、时间,配置语言什么的。
网络似乎需要手动配置:
1)先装vim
# apt-get update
# apt-get install vim
# 再装个ufw(防火墙工具)
# apt-get install ufw
2)修改网卡配置文件 /etc/network/interfaces
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.1
dnsnameservers 192.168.1.1 8.8.8.8 8.8.4.4
二、在Armbian上安装Docker和portainer
1. 在Armbian上安装Docker
使用官方的shell安装,如下:# curl -fsSL https://get.docker.com -o get-docker.sh
# sh get-docker.sh
安装完成后, 用下面命令测试
# docker run hello-world
(另: 也可用armbian-config安装docker, 完成后用docker run hello-world测试,docker能正常工作, 但安装portainer-ce后不正常, 后换回用官方shell安装)
2. 在Docker上安装Portainer, 用于Docker管理
# 安装
# docker pull portainer/portainer-ce
# 启动
# docker volume create portainer_data
# docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
然后用浏览器打开http://armbian设备网址:9000, 就能看到portainer的管理界面
在管理界面里进行初始配置。
补充: 忘记Portainer密码后, 如何修改portainer密码
1)查看Portainer的CONTAINER ID
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
30f1a2690e55 portainer/portainer-ce "/portainer" 7 days ago Up 7 hours 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp, 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp, 9443/tcp portainer
看到portainer的CONTAINER ID为30f1a2690e55
2) 停止Portainer容器(参数为portainer的CONTAINER ID)
# docker stop 30f1a2690e55
3) 重置密码: 命令中-v后的参数(portainer_data:/data)与启动时(见前面docker run)用的一样
# docker run --rm -v portainer_data:/data portainer/helper-reset-password
# 第一次调用时, portainer/helper-reset-password会下载安装
Unable to find image 'portainer/helper-reset-password:latest' locally
latest: Pulling from portainer/helper-reset-password
79916c70cb9e: Pull complete
69e9153f20cb: Pull complete
Digest: sha256:735a809b1bfe14b5fae340d4b350bae97c2016371c47fb6e34d71a45e4512f79
Status: Downloaded newer image for portainer/helper-reset-password:latest
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
2022/07/24 05:17:47 Password succesfully updated for user: admin
2022/07/24 05:17:47 Use the following password to login: 3<X$v+1PLx-Jj2pY4GBq79=5Us8R_n/\
需要记住这个密码.
另: 在Portainer的web管理界面中, settings->Authentication->Password Rules, 可以修改密码强度(长度)
注意: 在Docker中跑的Image需要和系统的Architectures一致, 比如R3300L需要选择ARM64 Architectures的image
三、在Docker上跑openwrt
相关信息:
1.openwrt for docker下载(flippy版本):
# docker pull unifreq/openwrt-aarch64
2.运行openwrt for docker(注意:这里并不需要设置网络):
# 这里要使用固定ip地址(用--ip参数设置), ip段看ifconfig中docker的网段, 地址放在较后位置,避免被占
# 直接使用--ip参数的方式, 测试失败!
# docker run --restart always --name openwrt -p 80:80 --ip 172.17.0.199 -d --privileged unifreq/openwrt-aarch64
# 要先建立一个docker的静态network, 自定网段, 但不要与现有docker网段(172.17.0.0/16)冲突
# docker network create --subnet=192.168.188.0/24 staticnet
# 建立docker network后, 可以使用docker network ls查看新建的network
# 启动openwrt, 设置使用静态地址
# docker run --restart always --name openwrt -p 80:80 --net staticnet --ip 192.168.188.188 -d --privileged unifreq/openwrt-aarch64
3.配置openwrt in Docker
先进入portainer查看openwrt运行的容器地址,这里是172.17.0.3 192.168.188.188
进入openwrt容器
# docker exec -it openwrt /bin/bash
临时手动修改openwrt内部地址:
docker# ifconfig br-lan 172.17.0.3 netmask 255.255.255.0
docker# ifconfig br-lan 192.168.188.188 netmask 255.255.255.0
# 设置网关
docker# route add default gw 172.17.0.1
docker# route add default gw 192.168.188.1
修改完成后,查看状态
docker# wget http://172.17.0.3
docker# wget http://192.168.188.188
# 如果能看到回应表明容器内部运行正常
docker# wget http://192.168.1.8
# 上面地址是armbian网卡地址, 如果能看到回应, 表明容器端口映射出来也正常
再在另一台windows机器上,用浏览器打开http://192.168.1.8,如果能看到openwrt界面,则手动设置成功.
再使用浏览器进入openwrt,设置网卡地址信息(设置为容器分配的地址)(手动设置完成后,下次重启又会回到最初状态, 需要用luci设置并保存配置)
Openwrt的网络配置文件是/etc/config/network, 也许手动修改配置文件也可以.
另: 在Docker版本的openwrt里,同样可以用/etc/coremark.sh获取设备性能数据
Docker# /etc/coremark.sh
关于地址设定:
a.由于docker的启动顺序不同,容器可能会在多次启动时获得不同的地址,所以需要使用static方式指定容器ip。
b.还有一种方式,建立macvlan来做通讯,这样方式还需要主设备网卡打开混杂模式,比较麻烦。
经测试, openwrt可以在armbian系统重启后自动启动; 在openwrt容器里(docker exec -it openwrt bash进入)halt关机后, 也会自动重启.
三、在Armbian上安装其它服务
1.samba
# 注: 不要用armbian-config安装, 安装后找不到/etc/init.d/smbd,
# 却多一个/etc/init.d/samba-ad-dc
# apt-get udpate
# samba是samba服务器, cifs-utils是Windows共享(可不装), sambaclient是samba客户端(也可不装
# apt-get install samba cifs-utils sambaclient
配置samba:
修改配置文件/etc/samba/smb.conf(最后的文件如下, 并确认可用_包括Win10/Es文件浏览器 on 安卓手机_安卓手机上也会提示输入用户名密码):
[global]
workgroup = WORKGROUP
server string = %h server
hosts allow = 192.168.1.
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
panic action = /usr/share/samba/panic-action %d
load printers = yes
printing = cups
printcap name = cups
min receivefile size = 16384
write cache size = 524288
getwd cache = yes
socket options = TCP_NODELAY IPTOS_LOWDELAY
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
public = yes
guest ok = yes
writable = no
printable = yes
printer admin = jimway
[print$]
comment = Printer Drivers
path = /etc/samba/drivers
browseable = yes
guest ok = no
read only = yes
write list = jimway
[Share]
comment = Share_AmlR3300l
path = /mnt/ext/share
writable = yes
public = no
valid users = jimway
force create mode = 0644
# 用smbpasswd设置用户密码(用adduser增加smb用户)
# smbpasswd jimway
注: 找不到smbpasswd文件, 但samba用户是可用的
重启samba后生效
# service smbd restart
注: 在测试中, (老MacBook笔记本连无线桥接路由wifi)用samba方式往R3300L(网线连接到主路由)上拷大文件(8G不到)出现了死机现象,表现为SecureCrt上操作无反应,直接在R3300L上操作也差不多.
后来用SecureCrt上sftp方式向R3300L拷贝同样的大文件, 显示传输速率只有450KB/s(上传)/1700KB/s(下载)
不能确定瓶颈在哪:
网络测试过(xWin下用Arora浏览器访问speedtest), 差不多能到百兆;
tf卡读写速度也测过(hdparm -T), 读能到750MB/sec以上, 写也能到20MB/sec以上
大文件可能只能用U盘拷了!
R3300L这盒子硬件和Q7差不多, 同样也是有缺陷的.
另: 用Redmi K30手机连samba服务器, (使用同样的无线桥接路由器的wifi)上传能到1.5MB/s以上, 下载能到接近5MB/s
为scanner增加一个共享, 添加独立的用户, 并分配相应的权限。 操作: 1.增加共享ScannerShare 在原/etc/samba/smb.conf最后增加: [ScannerShare] comment = ScannerShare_AmlR3300l path = /mnt/ext/scannershare guest ok = yes writable = yes public = yes valid users = jimway, scanner force create mode = 0644 |
2. 相应的增加共享目录/mnt/ext/scannershare # mkdir /mnt/ext/scannershare |
3. 增加(samba)用户scanner # useradd scanner # smbpasswd -a scanner (设置密码) # vim /etc/passwd (把scanner设置为nologin) |
4. 为ScannerShare设置有效用户 已设置valid users
设置完成, 重启samba服务 # service smbd restart |
2.miniDLNA
# apt-get udpate
# apt-get install minidlna
配置miniDLNA:
修改配置文件/etc/minidlna.conf中的媒体目录, 如下
media_dir=/mnt/ext/share/media
重启miniDLNA后生效
# service minidlna restart
注: 当前miniDLNA版本为1.2.1, 缺省不支持rmvb格式文件, 需要修改源代码并重新编译, 参考:
四、在Armbian上安装配置hugo(?)服务器
R3300l所用Amlogic S905L支持arm64, 所装的Armbian应该是64位的
# uname -a
Linux AmlR3300l 5.3.0-aml-g12 #5.97 SMP PREEMPT Mon Sep 23 14:33:30 MSK 2019 aarch64 aarch64 aarch64 GNU/Linux
# 下载hugo官方包
# wget https://github.com/gohugoio/hugo/releases/download/v0.82.1/hugo_0.82.1_Linux-ARM64.deb
# 使用dpkg安装已下载的hugo的deb包
# dpkg -i hugo_0.82.1_Linux-ARM64.deb
# 查看hugo版本, 以检测安装hugo是否成功
# hugo version
hugo v0.82.1-60618210 linux/arm64 BuildDate=2021-04-20T11:02:50Z VendorInfo=gohugoio
# 建立hugo博客的根目录(应该可以放多个博客)
# mkdir /mnt/ext/hugo
# 进入这个目录
# cd /mnt/ext/hugo
# 新建一个博客(目录)
# hugo new site blog
# 进入博客目录
# cd blog
# git clone https://github.com/alanorth/hugo-theme-bootstrap4-blog.git themes/hugo-theme-bootstrap4-blog
# 将exampleSite 目录中的内容,复制到博客根目录blog中,在blog目录中执行命令:
# cp themes/hugo-theme-bootstrap4-blog/exampleSite/* ./ -r
# 启动hugo服务: 绑定到eth0地址, 根url是eth0地址:1313端口
# hugo server --bind 192.168.1.8 --baseURL=http://192.168.1.8:1313
可以从另一机器上的浏览器访问http://192.168.1.8:1313, 应该可以看到初始的网页.
初步的安装完成, 后面看下怎么使用.
另:
# ifconfig eth0|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"
192.168.1.8
可以简化为
# ifconfig eth0|grep inet|grep -v inet6|awk '{print $2}'|tr -d "addr:"
评论