请输入链接描述

#修改主机名
hostnamectl set-hostname wky

#写入固定网卡
sed -i '7c hwaddress 00:22:6D:59:E4:CB' /etc/network/interfaces

#更新系统
sudo apt update -y && apt upgrade -y

# 安装docker
apt install docker.io
apt install docker-compose

# 更换docker源
if [ ! -d /etc/docker ];then
sudo mkdir -p /etc/docker
fi
cat << EOF | sudo tee /etc/docker/daemon.json
{
    "registry-mirrors": [
        "https://hub-mirror.c.163.com​",
        "https://mirror.baidubce.com​",
        "https://dockerproxy.com",
        "https://docker.nju.edu.cn"
    ]
}
EOF

# 重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker

#写入emmc
emmc: cd /boot/install ./install.sh
# 安装ctop
wget "https://github.com/bcicen/ctop/releases/download/v0.7.7/ctop-0.7.7-linux-arm"
sudo cp ctop-0.7.7-linux-arm /usr/local/bin/ctop&chmod +x /usr/local/bin/ctop

# 安装1Panel
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh
# tailscale
version: "3"
services:
    tailscale:
        container_name: tailscale
        volumes:
            - /var/lib:/var/lib
            - /DATA/AppData/tailscaled/net/tun:/dev/net/tun
        network_mode: host
        cap_add:
            - NET_ADMIN
            - NET_RAW
        environment:
            - TS_AUTHKEY=tskey-auth-kgWLfq5CNTRL-xWKKrQ3sCa1RjLJxd5L9X1bUohvhFf6X768
        image: tailscale/tailscale

# syncthing
version: "3"
services:
    syncthing:
        container_name: syncthing
        network_mode: host
        privileged: true
        restart: unless-stopped
        ports:
            - 8384:8384
        environment:
            - TZ=Asia/Shanghai
        volumes:
            - /DATA/AppData/syncthing:/var/syncthing
        image: syncthing/syncthing:latest
# alist
version: "3"
services:
    alist:
        restart: always
        volumes:
            - /DATA/AppData/alist:/opt/alist/data
        ports:
            - 5244:5244
        environment:
            - PUID=0
            - PGID=0
            - UMASK=022
        container_name: alist
        image: xhofe/alist:latest

玩客云Armbian_20.11_Aml-s812_5.9.0-支持USB-WIFI最终完美版

写入系统

将镜像再写入到U盘,插到离网口较近的那个usb口,然后玩客云通电,
进入armbian后,进入cd /boot/install 目录 执行 ./install.sh 即可写进emmc
[collapse status="false" title="EMMC"]
Cppying BOOT...done.
Edit init config...done.
Formatting ROOT partition...
e2fsck 1.44.5 (15-Dec-2018)
ROOT_EMMC: clean, 11/433328 files, 51202/1732096 blocks
done.
Copying ROOTFS.
Copy BIN
Create DEV
Copy ETC
Copy HOME
Copy LIB
Create MEDIA
Create MNT
Copy OPT
Create PROC
Copy ROOT
Create RUN
Copy SBIN
Copy SELINUX
Copy SRV
Create SYS
Create TMP
Copy USR
Copy fstab
Change MAC


Complete copy OS to eMMC



盒子emmc安装完成以后先不要拔U盘,输入命令reboot进行系统重启

盒子重启完成以后输入poweroff命令关机拔出U盘,然后通电启动进入系统

root@arm:~#  uname -a
Linux arm 5.9.0-rc7-aml-s812 #20.11 SMP Thu Jun 30 22:41:02 CST 2022 armv7l GNU/Linux

root@arm:~# df -H
Filesystem      Size  Used Avail Use% Mounted on
udev            481M     0  481M   0% /dev
tmpfs           104M  3.2M  101M   4% /run
/dev/sda2        31G  1.1G   29G   4% /
tmpfs           519M     0  519M   0% /dev/shm
tmpfs           5.3M     0  5.3M   0% /run/lock
tmpfs           519M     0  519M   0% /sys/fs/cgroup
tmpfs           519M     0  519M   0% /tmp
/dev/sda1       536M   51M  486M  10% /boot
armbian-ramlog   53M  1.9M   51M   4% /var/log
tmpfs           104M     0  104M   0% /run/user/0

root@arm:/boot/install# lsusb
Bus 002 Device 002: ID 090c:1000 Silicon Motion, Inc. - Taiwan (formerly Feiya Technology Corp.) Flash Drive
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0bda:8178 Realtek Semiconductor Corp. RTL8192CU 802.11n WLAN Adapter
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

wifi drivers


/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ath/ar5523/ar5523.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ath/ath10k/ath10k_core.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ath/ath10k/ath10k_sdio.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ath/ath10k/ath10k_usb.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ath/ath6kl/ath6kl_core.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ath/ath6kl/ath6kl_sdio.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ath/ath6kl/ath6kl_usb.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ath/ath9k/ath9k_common.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ath/ath9k/ath9k_htc.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ath/ath9k/ath9k_hw.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ath/ath9k/ath9k.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ath/ath.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ath/carl9170/carl9170.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ath/wcn36xx/wcn36xx.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/atmel/at76c50x-usb.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/broadcom/b43/b43.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/broadcom/b43legacy/b43legacy.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/broadcom/brcm80211/brcmsmac/brcmsmac.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/intersil/hostap/hostap.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/intersil/p54/p54common.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/intersil/p54/p54spi.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/intersil/p54/p54usb.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/mac80211_hwsim.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/marvell/libertas/libertas.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/marvell/libertas/libertas_sdio.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/marvell/libertas/usb8xxx.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/marvell/libertas_tf/libertas_tf.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/marvell/libertas_tf/libertas_tf_usb.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/marvell/mwifiex/mwifiex.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/marvell/mwifiex/mwifiex_sdio.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/marvell/mwifiex/mwifiex_usb.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/mediatek/mt76/mt7615/mt7615-common.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/mediatek/mt76/mt7615/mt7663u.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/mediatek/mt76/mt7615/mt7663-usb-sdio-common.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/mediatek/mt76/mt76.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/mediatek/mt76/mt76-usb.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0-common.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0u.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/mediatek/mt76/mt76x02-lib.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/mediatek/mt76/mt76x02-usb.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2-common.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2u.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/mediatek/mt7601u/mt7601u.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ralink/rt2x00/rt2500usb.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ralink/rt2x00/rt2800lib.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ralink/rt2x00/rt2800usb.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ralink/rt2x00/rt2x00lib.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ralink/rt2x00/rt2x00usb.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ralink/rt2x00/rt73usb.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/realtek/rtl818x/rtl8187/rtl8187.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/rtl8192cu.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/realtek/rtlwifi/rtl_usb.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/realtek/rtlwifi/rtlwifi.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/rndis_wlan.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/rsi/rsi_91x.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/rsi/rsi_sdio.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/rsi/rsi_usb.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/rtl8189fs/8189fs.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/rtl8192cu/8192cu.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/rtl8192eu/8192eu.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/rtl8723ds/8723ds.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/rtl8723du/8723du.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/rtl8812au/88XXau.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/rtl88x2bu/88x2bu.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/st/cw1200/cw1200_core.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/st/cw1200/cw1200_wlan_sdio.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ti/wl1251/wl1251.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ti/wl1251/wl1251_sdio.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ti/wl1251/wl1251_spi.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ti/wl12xx/wl12xx.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ti/wl18xx/wl18xx.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ti/wlcore/wlcore.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ti/wlcore/wlcore_sdio.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/ti/wlcore/wlcore_spi.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/virt_wifi.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/xradio/xradio_wlan.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/zydas/zd1201.ko
/lib/modules/5.9.0-rc7-aml-s812/kernel/drivers/net/wireless/zydas/zd1211rw/zd1211rw.ko

U盘内uEnv.txt文件修改

镜像写入完成后,打开U盘内的uEnv.txt文件,修改要用的dtb文件
经过网友反馈,SD卡不识别,研究了下,原来是因为dtb的问题,于是修改了下dtb文件,为了便于跟其他dtb文件分辨,
命名为:meson8b-bugscaner.dtb 已经修复了SD卡不识别的问题。
如果您刷了之前的固件,请在网盘下载玩客云Armbian_20.11_Aml-s812_5.9.0-支持USB-WIFI最终完美版.img.xz
重新刷一下最新的,或者在网盘下载meson8b-bugscaner.dtb 自行替换,即可解决SD卡的问题。

插入USB无线网卡,连接wifi

nmtui

选择要连接的wifi,enter后输入密码, ok进行连接
ifconfig命令查看,已经获取到IP地址

2023-11-07T03:05:41.png
2023-11-07T03:05:52.png
2023-11-07T03:06:40.png
[/collapse]


CasaOS

CasaOS

wget -qO- https://get.casaos.io | sudo bash

or

curl -fsSL https://get.casaos.io | sudo bash
   _____                 ____   _____ 
  / ____|               / __ \ / ____|
 | |     __ _ ___  __ _| |  | | (___  
 | |    / _` / __|/ _` | |  | |\___ \ 
 | |___| (_| \__ \ (_| | |__| |____) |
  \_____\__,_|___/\__,_|\____/|_____/ 
                                      
   --- Made by IceWhale with YOU ---

[  OK  ] Your hardware architecture is : armv7l
[  OK  ] Your System is : Linux
[  OK  ] Your Linux Distribution is : debian 
[  OK  ] Memory capacity check passed.
[  OK  ] Disk capacity check passed.
[ INFO ] Install the necessary dependencies: smartmontools 
[ INFO ] Install the necessary dependencies: udevil 
[ INFO ] Install the necessary dependencies: samba 
[ INFO ] Install the necessary dependencies: cifs-utils 
[ INFO ] Install the necessary dependencies: mergerfs
[ INFO ] Install the necessary dependencies: Docker
[  OK  ] Current Docker verison is 24.0.7.
[ INFO ] Configuration CasaOS Addons
[ INFO ] Downloading https://casaos.oss-cn-shanghai.aliyuncs.com/IceWhaleTech/CasaOS-Gateway/releases/download/
✅ CURRENT_VERSION: CURRENT_VERSION_NOT_FOUND
✅ SOURCE_VERSION: v0.4.4
✅ Migration is not needed.
[  OK  ] Rclone v1.61.1 installed successfully.
Created symlink /etc/systemd/system/multi-user.target.wants/rclone.service → /lib/systemd/system/rclone.service.
[ INFO ] Starting casaos-gateway.service...
[ INFO ] Starting casaos-message-bus.service...
[ INFO ] Starting casaos-user-service.service...
[ INFO ] Starting casaos-local-storage.service...
[ INFO ] Starting casaos-app-management.service...
[ INFO ] Starting rclone.service...
[ INFO ] Starting casaos.service...
[ INFO ] Checking casaos-gateway.service...
[  OK  ] casaos-gateway.service is running.
[ INFO ] Checking casaos-message-bus.service...
[  OK  ] casaos-message-bus.service is running.
[ INFO ] Checking casaos-user-service.service...
[  OK  ] casaos-user-service.service is running.
[ INFO ] Checking casaos-local-storage.service...
[  OK  ] casaos-local-storage.service is running.
[ INFO ] Checking casaos-app-management.service...
[  OK  ] casaos-app-management.service is running.
[ INFO ] Checking rclone.service...
[  OK  ] rclone.service is running.
[ INFO ] Checking casaos.service...
[  OK  ] casaos.service is running.
 ─────────────────────────────────────────────────────
 CasaOS v0.4.4.2 is running at:
 ─────────────────────────────────────────────────────
bonding_masters: error fetching interface information: Device not found
 - http://192.168.123.204 (eth0)
 Open your browser and visit the above address.
 ─────────────────────────────────────────────────────

 CasaOS Project  : https://github.com/IceWhaleTech/CasaOS
 CasaOS Team     : https://github.com/IceWhaleTech/CasaOS#maintainers
 CasaOS Discord  : https://discord.gg/knqAbbBbeX
 Website         : https://www.casaos.io
 Online Demo     : http://demo.casaos.io

 Uninstall       : casaos-uninstall

安装homeassistant

hacs

2023-11-08T05:14:20.png
Docker 镜像 *homeassistant/home-assistant:stable
标题 *homeassistant
Web UI地址留空:8123
/DATA/AppData/homeassistant/config/config
容器主机名homeassistant
docker run -d \
  --name homeassistant \
  --privileged \
  --restart=unless-stopped \
  -e TZ=Asia/Shanghai \
  -v /DATA/AppData/homeassistant/config:/config \
  --network=host \
  ghcr.io/home-assistant/home-assistant:stable
#查询目录
find / -type d -name "homeassistant"

#进入查询目录
cd /DATA/AppData/homeassistant/config/

#新建custom_components文件夹
mkdir custom_components

#文件夹赋权
chmod 777 -R custom_components

##进入config目录
cd /DATA/AppData/homeassistant/config/

#下载 hacs 并赋权
chmod 777 -R hacs

#查询当前文件夹权限
ls -l

alist初始密码

docker exec -it alist ./alist admin

mysql

docker run -d \
--name mysql \
--net=host \
-p 3306:3306 \
-p 33060:33060 \
-v /DATA/AppData/mysql/logs:/var/log \
-v /DATA/AppData/mysql/data:/var/lib/mysql \
-v /DATA/AppData/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=@gdsfhFSfhj43 \
biarms/mysql:5.7

mysql -uroot -p@gdsfhFSfhj43

grant all privileges on *.* to 'root'@'%' ;
mysql> grant all privileges on *.* to 'root'@'%' ;
Query OK, 0 rows affected (0.02 sec)

mysql> select Host,User,plugin from mysql.user;
+-----------+---------------+-----------------------+
| Host      | User          | plugin                |
+-----------+---------------+-----------------------+
| localhost | root          | mysql_native_password |
| localhost | mysql.session | mysql_native_password |
| localhost | mysql.sys     | mysql_native_password |
| %         | root          | mysql_native_password |
+-----------+---------------+-----------------------+
4 rows in set (0.00 sec)
show variables like 'character%';
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

小怪

小爱音箱播放局域网NAS上的音乐

mkdir -p /opt/apps & nano /opt/apps/httpRandomMusic.py

httpRandomMusic.py

# coding=utf-8

# http随机音乐播放器
# 给小爱音箱用于播放nas的音乐
# 手搓了个简易http服务
# Sparkle
# v3.3

import os, random, urllib, posixpath, shutil, subprocess
from http.server import HTTPServer, BaseHTTPRequestHandler

# 端口号
port = 65533

# 存音乐的目录
fileDir = '/DATA/Media/Music'  

# 实时转码需要依赖ffmpeg的路径 如果为空就不转码
ffmpeg = 'ffmpeg'


fileList = None
fileIndex = 0
def updateFileList():
    global fileList
    global fileIndex
    try:
        os.chdir(fileDir)
    except Exception as e:
        print(e)
        print('ERROR: 请检查目录是否存在或是否有权限访问')
        exit()
    fileIndex = 0
    # for i in os.listdir(fileDir):
    #     if i.lower().split('.')[-1] in ['flac','mp3','wav','aac','m4a']:
    #         fileList.append(i)
    fileList = list(filter(lambda x: x.lower().split('.')[-1] in ['flac','mp3','wav','aac','m4a'], os.listdir('.')))
    fileList.sort(key=lambda x: os.path.getmtime(x))
    fileList.reverse()
    print(str(len(fileList)) + ' files')


class meHandler(BaseHTTPRequestHandler):
    def translate_path(self, path):
        path = path.split('?',1)[0]
        path = path.split('#',1)[0]
        trailing_slash = path.rstrip().endswith('/')
        try:
            path = urllib.parse.unquote(path, errors='surrogatepass')
        except UnicodeDecodeError:
            path = urllib.parse.unquote(path)
        path = posixpath.normpath(path)
        words = path.split('/')
        words = filter(None, words)
        path = fileDir
        for word in words:
            if os.path.dirname(word) or word in (os.curdir, os.pardir):
                continue
            path = os.path.join(path, word)
        if trailing_slash:
            path += '/'
        return path

    def return302(self, filename):
        self.send_response(302)
        self.send_header('Location', '/' + urllib.parse.quote(filename))
        self.end_headers()

    def do_GET(self):
        global fileList
        global fileIndex
        print(self.path)
        if self.path == '/':
            self.return302(fileList[fileIndex])
            fileIndex += 1
            if fileIndex >= len(fileList):
                fileIndex = 0
        elif self.path == '/random':
            updateFileList()
            random.shuffle(fileList)
            self.return302(fileList[0])
            fileIndex = 1
        elif self.path == '/frist':
            updateFileList()
            self.return302(fileList[0])
            fileIndex = 1
        else:
            path = self.translate_path(self.path)
            print(path)
            if os.path.isfile(path):
                self.send_response(200)
                if ffmpeg and path.lower().split('.')[-1] not in ['wav','mp3']:
                    self.send_header("Content-type", 'audio/wav')
                    t = subprocess.getoutput('{} -i "{}" 2>&1 | {} Duration'.format(ffmpeg, path, 'findstr' if os.name == 'nt' else 'grep')).split()[1][:-1].split(':')
                    self.send_header("Content-Length", str((float(t[0]) * 3600 + float(t[1]) * 60 + float(t[2])) * 176400))
                    self.end_headers()
                    pipe = subprocess.Popen([ffmpeg, '-i', path, '-f', 'wav', '-'], stdout=subprocess.PIPE, bufsize=10 ** 8)
                    try:
                        shutil.copyfileobj(pipe.stdout, self.wfile)
                    finally:
                        self.wfile.flush()
                        pipe.terminate()
                else:
                    self.send_header("Content-type", 'audio/mpeg')
                    with open(path, 'rb') as f:
                        self.send_header("Content-Length", str(os.fstat(f.fileno())[6]))
                        self.end_headers()
                        shutil.copyfileobj(f, self.wfile)
            else:
                self.send_response(404)
                self.end_headers()



if os.system("nslookup op.lan"):
    print('ERROR: 请将op.lan指向本机ip,否则小爱音箱可能无法访问')
updateFileList()
HTTPServer(("", port), meHandler).serve_forever()


新建sh脚本

nano /opt/apps/xiaomimusic.sh

添加一下内容

#!/bin/bash
python3 /opt/apps/httpRandomMusic.py &

添加启动服务

nano /lib/systemd/system/rc-local.service
[Install]
WantedBy=multi-user.target
Alias=rc-local.service

添加启动脚本路径

nano /etc/rc.local
bash /opt/apps/xiaomimusic.sh

在exit 0前面添加需要启动的服务

设置启动服务

#设置rc-local服务为开机自动启动
systemctl enable rc-local
#启动rc-local服务。
systemctl start rc-local.service
#重启rc-local服务
systemctl  restart  rc-local

查看rc-local服务状态
systemctl status rc-local.service

验证部署

用其他设备浏览器访问 http://op.lan:65533 能正常播放
如果你可以进去小爱音响的shell,那么尝试 curl -v http://op.lan:65533
此时控制台会有响应的输出
如果能验证通过但还是用不了,请尝试重启,并确保dns真的成功劫持了,因为只要能解析就一定能用

指令

小爱同学
打开小怪

然后以下三条指令三选一
指令功能
播放服务器的音乐按着上次的进度继续播放(没有进度就是从头放)
从头播放服务器的音乐按修改时间倒序播放(先放最后放进文件夹的文件)
随机播放服务器的音乐随机播放(播放列表打乱,不会重复随机到同一首)

2023.10.16玩客云直刷包-armbian支持DOCKER-USB-WIFI-推荐1.0主板刷这个
玩客云Armbian_20.11_Aml-s812_5.9.0-支持USB-WIFI最终完美版.img.xz
魔百和M401A刷入Armbian系统EMMC开启wifi
httpRandomMusic
armbian开机启动脚本使用方法
玩客云docker下刷openwrt
简单 Docker 安装入门教程 - Debian / Ubuntu 配置国内镜像源方法
[[Debian] 玩客云 debian bullseye kernel 5.10.68][15]

最后修改:2023 年 12 月 30 日
如果觉得我的文章对你有用,请随意赞赏