硬件:某某网络电视机盒子(避免广告嫌疑) 盒子配置:s905x3 4核 内存4G 硬盘128G 价格2XX元
软件:balenaEtcher 1.7.9 ,Armbian_22.05.0_Aml_s905x3_focal_5.15.34_2022.04.18.2343.img.gz,
SSH工具MobaXterm_20.0, 宝塔7.9.5(这个不用单独下载可以在线用脚本安装)
本文仅供分享和研究学习,不得擅自转载。本人不卖服务器也不出租空间、不卖电视盒子、不接网站业务、平时都在上班工作不接受咨询打扰,如有成果我再分享。
一般选4G内存,64G硬盘的也可够了,我想存的东西多就买的4G+128G的。
注意事项:U盘要好,插网线连网网络要好,还有盒子的电源要用原装质量好。
1.安装balenaEtcher 1.7.9后,运行该程序,插入空白U盘,将下载好的Armbian_22.05.0_Aml_s905x3_focal_5.15.34_2022.04.18.2343.img.gz写入U盘,完成后关闭该 程序;
2.将做好Armbian启盘的U盘插到盒子上,把回形针拉直后顶住耳机孔内的按键,再插上电源,待显示屏有画面时松开牙签;
3.刷完机后重启,不用输入密码,直接按几次回车。
如果提示容易小就使用df -h查看分区信息,DEV的小就用armbian-tf扩容
4.输入armbian-install 命令写入到盒子闪存EMMC,选择盒子型号比如504,选择写入硬盘格式,选择1项。
5.写完后,拨掉U盘,拨掉电源线,然后再插上电。
6.提示输入用户名输入root,密码输入1234,提示更换密码,多按几次回车就行了。
7.输入armbian-config 命令进行配置网络,或命令连接wifi:nmcli dev wifi connect XXXX password 1897558XXXX (XXXX是WIFI名,1897558XXXX是WIFI密码),当然你不用无线也可以插网线用,也可以两种同时用。
8.依次输入命令armbian-update 更新内核,apt update 更新程序,apt install wget 安装wget。
9.使用ip addr查看IP地址,使用SSH工具进行后续安装 比如IP查到是192.168.0.106
10.安装Docker服务命令armbian-docker,中途按“h”
11.安装宝塔wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh ed8484bec
12.机器关机命令shutdown 或重启命令reboot
宝塔显示访问地址输入命令bt default查看如下样子
外网面板地址: http://223.152.59.43:8888/9bd00155
内网面板地址: http://192.168.1.106:8888/9bd00155
username: 4wqyv520
password: fa3cfe5b
安装费时费脑,很多地方省略了也没记得拍照了。
在浏览器输入地址了即可进入界面
宝塔安装好后就可以进行WEB服务器的配置工作了,部署安装WEB服务器的环境软件和应用。
我放了两个网站和一个进销存系统,用起来顺畅,资源绰绰有途,当然不只是放网站,还同时可以装个openwrt做路由器用,同时也可以安装Docker及HomeAssistant做智能家居用,并且可以同时工作的,当然电视功能就不能同时工作了。
虽然置说不上很好 ,但一般来说都够用了,如是自己花钱买云服务器顶得上它2000元以上的配置了,花最少钱把事办成的目的已经达到了
13.WEB服务器所用软件安装完后,还需要进行内外网穿透设置
可以用阿里去DNS解析进行自动变更IP地址,首先在阿里注册域名然后获得ID和Secret。
在服务器上创建文件如ddns.py内容如下
#!/usr/bin/python3
# coding= utf-8
import requests
import traceback
import time
from datetime import datetime
import json
import sys
from aliyunsdkcore.client import AcsClient
from aliyunsdkalidns.request.v20150109.DescribeDomainRecordsRequest import DescribeDomainRecordsRequest
from aliyunsdkalidns.request.v20150109.UpdateDomainRecordRequest import UpdateDomainRecordRequest
class DNSRecord:
json_data = None # json 配置文件内容
client = None # 阿里云client
public_dic = {"time":None,"ip":None}
dns_record_dic = {"time":None,"ip":None,"record_id":None}
@classmethod
def init(cls):
"""初始化阿里云 client"""
try:
cls.client = AcsClient(cls.json_data['id'], cls.json_data['secret'], cls.json_data['region'])
print("Aliyun key 认证成功")
return True
except Exception as e:
print("Aliyun key 认证失败")
return False
@classmethod
def reload_config(cls):
"""加载配置文件"""
with open('ddns2config.json',mode='r',encoding='utf-8') as fp:
cls.json_data = json.load(fp)
@classmethod
def get_dns_record(cls):
"""获取dns记录"""
try:
request = DescribeDomainRecordsRequest()
request.set_accept_format('json')
request.set_DomainName(cls.json_data['domain_name'])
response = cls.client.do_action_with_exception(request)
data = json.loads(str(response, encoding='utf-8'))
for record in data['DomainRecords']['Record']:
if cls.json_data['RR'] == record['RR']:
cls.dns_record_dic['time'] = datetime.now()
cls.dns_record_dic['ip'] = record['Value']
cls.dns_record_dic['record_id'] = record['RecordId']
return True
except:
traceback.print_exc()
return False
@classmethod
def get_public_ip(cls):
"""获取公网IP"""
for url in cls.json_data['public_url']:
try:
request_obj = requests.get(url,timeout=5)
if request_obj.status_code == 200:
cls.public_dic['time'] = datetime.now()
cls.public_dic['ip'] = request_obj.text
return True
except:
traceback.print_exc()
return False
@classmethod
def update_dns_record(cls,public_ip):
update_time = datetime.now()
update_time_str = update_time.strftime("%Y-%m-%d %H:%M:%S")
try:
request = UpdateDomainRecordRequest()
request.set_accept_format('json')
request.set_Value(public_ip)
request.set_Type(cls.json_data['type'])
request.set_RR(cls.json_data['RR'])
request.set_RecordId(cls.dns_record_dic['record_id'])
response = cls.client.do_action_with_exception(request)
cls.public_dic['time'] = update_time
cls.dns_record_dic['time'] = update_time
print(f"[更新成功 {update_time_str}] 域名:{cls.json_data['domain_name']} +
主机:{cls.json_data['RR']} 记录类型:{cls.json_data['type']} +
IP地址:{cls.dns_record_dic['ip']}")
return True
except Exception as e:
print(f"域名:{cls.json_data['domain_name']} 主机:{cls.json_data['RR']} 解析失败,错误:",e)
return False
@classmethod
def main(cls):
cls.reload_config()
cls.init()
while True:
public_time = cls.public_dic['time']
dns_time = cls.dns_record_dic['time']
if not dns_time:
ret = cls.get_dns_record() # 更新云端的IP、时间、record_id
if not ret:
time.sleep(10)
continue
dns_time = cls.dns_record_dic['time']
if not public_time:
ret = cls.get_public_ip() # 更新本地公网的IP、时间
if not ret:
time.sleep(10)
continue
public_time = cls.public_dic['time']
if (public_time - dns_time).total_seconds() < 300: # 本地时间和云端时间小于5分钟
print("本地更新时间与云端更新时间差小于5分钟")
time.sleep(10)
continue
else:
public_ret = cls.get_public_ip() # 更新本地公网的IP、时间
if not public_ret:
time.sleep(10)
continue
dns_ret = cls.get_dns_record() # 获取阿里云dns记录
if not dns_ret:
time.sleep(10)
continue
public_ip = cls.public_dic['ip']
dns_ip = cls.dns_record_dic['ip']
if public_ip != dns_ip: # 本地公网IP和云端IP不相等
ret = cls.update_dns_record(public_ip)
if not ret:
time.sleep(10)
else:
time.sleep(10)
if __name__ == "__main__":
dns_r = DNSRecord
dns_r.main()
另一个文件ddns2config.json内容如下:
{
"id":"XXXXX",
"secret":"XXXXX",
"region":"cn-hangzhou",
"RR":["www","@"],
"type":"A",
"domain_name":"XXXX.com",
"public_url":["https://ip.3322.org","http://ip.138.com"]
}
下面分享一些用得到的命令和经验:
14.解决外挂U盘或硬盘移盘功能
查看系统所检测到的外置磁盘名称(这里用sda1):
lsblk(或者查看哪些需要挂载的NTFS硬盘设备;命令 fdisk -l |grep HPFS/NTFS)
在根目录新建一个目录用于挂载硬盘:
cd /.
mkdir mnts
将新增的外置硬盘挂载映射到新建的目录中:
mount /dev/sda1(外置硬盘名称) /mnts/
设置开机自动启动挂载:
blkid /dev/sda1
这一步可以显示硬盘信息,并记下UUID,然后修改 /etc/fstab,添加以下信息:
vi /etc/fstab
UUID=(上面查到的UUID) /mnts ntfs(外置硬盘的格式) defaults 0 0
修改填好好后,按 shift + : 键,输入 wq! 强制保存退出,然后输入命令强制刷新即可(:wq! 强制保存文件,并退出vi)
mount -a
15解决外挂不了时用
1)查看哪些需要挂载的NTFS硬盘设备;命令 fdisk -l |grep HPFS/NTFS
2)修改multipathd配置文件,并重启multipath服务
14.解决u盘启动armbian后,如何查看原盒子emmc中的内容
挂载 mmcblk1p1 mmcblk1p2 分区
使用
mount /dev/mmcblk1p1 /mnt
mount /dev/mmcblk1p2 /mnm1
【mount /dev/mmcblk1p1 /mnt】挂载emmc后就能看见emmc中的armbian系统了
16.armbian和BT命令集:
apt --fix-broken install 修复安装时缺失的内容
nmtui 配置网络
armbian-config 多配置功能
安装armbian-config的两条命令 apt install ntp和apt install armbian-config
1、查看进程id
pgrep ttnode
2、杀死进程
kill 1308
3、查看硬盘的分区
sudo fdisk -l
3、卸载文件卷
umount /dev/sda1
4、格式化
mkfs.vfat /dev/sda1
5、重启
reboot
6.创建挂载的文件夹
sudo mkdir <文件夹路径>
7。挂载操作
sudo mount /dev/sda1 <文件夹路径>
8分配权限
sudo chmod 777 <文件夹路径>
9 (3) 开机自动挂载
修改/etc/fstab文件,在末尾添加挂载信息。
首先打开并编辑该文件
sudo nano /etc/fstab
在最后一行添加新硬盘的挂载动作
/dev/sda1 <文件夹路径> ext4 defaults 0 0
最后reboot重启,验证开机是否自动挂载
关机命令poweroff
df -h查看分区信息
armbian-tf扩容
备份命令armbian-ddbr
nano /etc/default/armbian-ramlog 关闭USE_RSYNC=false修改日志文件大小为size=300M
vi /boot/uEnv.txt编辑器编辑uEnv.txt
# 或者
nano /boot/uEnv.txt辑器编辑uEnv.txt
free 查看交换分区信息
armbian-swap 6 修改交换分大小,6表示6G
本文仅供分享和研究学习,不得擅自转载。不卖服务器也不出租空间,不卖电视盒子,不接网站业务,平时都在上班工作不接受咨询打扰,如有成果我再分享。