mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2026-03-18 00:46:44 +08:00
Compare commits
4 Commits
build-2509
...
build-2509
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
edb9112435 | ||
|
|
0328163a9e | ||
|
|
0c9d94e1c5 | ||
|
|
d4bd94cb8a |
@@ -68,8 +68,9 @@ RUN sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/' /etc/apt/sources.lis
|
||||
;; \
|
||||
arm64) \
|
||||
apt-get install -y --no-install-recommends \
|
||||
v4l-utils libv4l-0 \
|
||||
libstdc++6 \
|
||||
v4l-utils libv4l-0 libavutil57 \
|
||||
libstdc++6 libavcodec59 libavformat59 \
|
||||
libswscale6 libavfilter8 libavdevice59 \
|
||||
libva2 libva-drm2 libva-x11-2 \
|
||||
libvdpau1 ocl-icd-libopencl1 \
|
||||
;; \
|
||||
|
||||
@@ -54,16 +54,13 @@ RUN sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/' /etc/apt/sources.lis
|
||||
mesa-vdpau-drivers \
|
||||
v4l-utils \
|
||||
libv4l-dev \
|
||||
&& if [ ${TARGETARCH} != arm64 ]; then \
|
||||
apt-get install -y --no-install-recommends \
|
||||
ffmpeg \
|
||||
libavcodec-dev \
|
||||
libavformat-dev \
|
||||
libavutil-dev \
|
||||
libswscale-dev \
|
||||
libavfilter-dev \
|
||||
libavdevice-dev; \
|
||||
fi \
|
||||
ffmpeg \
|
||||
libavcodec-dev \
|
||||
libavformat-dev \
|
||||
libavutil-dev \
|
||||
libswscale-dev \
|
||||
libavfilter-dev \
|
||||
libavdevice-dev \
|
||||
&& if [ ${TARGETARCH} != arm ] && [ ${TARGETARCH} != arm64 ]; then \
|
||||
apt-get install -y --no-install-recommends \
|
||||
vainfo \
|
||||
@@ -148,7 +145,7 @@ RUN git clone --depth=1 https://gitlab.freedesktop.org/libnice/libnice /tmp/libn
|
||||
|
||||
# 编译 Rockchip MPP、RGA 和 FFmpeg(仅 arm64)
|
||||
RUN if [ ${TARGETARCH} = arm64 ]; then \
|
||||
git clone -b jellyfin-mpp --depth=1 https://github.com/nyanmisaka/mpp.git /tmp/rkmpp \
|
||||
git clone --depth=1 https://github.com/rockchip-linux/mpp.git /tmp/rkmpp \
|
||||
&& mkdir -p /tmp/rkmpp/rkmpp_build && cd /tmp/rkmpp/rkmpp_build \
|
||||
&& cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DBUILD_TEST=OFF .. \
|
||||
&& make -j$(nproc) \
|
||||
@@ -158,21 +155,17 @@ RUN if [ ${TARGETARCH} = arm64 ]; then \
|
||||
&& meson setup rkrga rkrga_build --prefix=/usr --libdir=lib --buildtype=release -Dcpp_args=-fpermissive -Dlibdrm=false -Dlibrga_demo=false \
|
||||
&& meson configure rkrga_build > /dev/null \
|
||||
&& ninja -C rkrga_build install \
|
||||
&& git clone --depth=1 https://github.com/nyanmisaka/ffmpeg-rockchip.git /tmp/ffmpeg-rockchip \
|
||||
&& cd /tmp/ffmpeg-rockchip \
|
||||
&& ./configure --prefix=/usr --enable-gpl --enable-version3 --enable-libdrm --enable-rkmpp --enable-rkrga \
|
||||
--enable-libv4l2 --enable-libx264 --enable-shared --disable-programs \
|
||||
--disable-doc --disable-htmlpages --disable-manpages --disable-network --disable-protocols \
|
||||
--disable-decoders --disable-debug --disable-alsa \
|
||||
&& make -j$(nproc) \
|
||||
&& make install \
|
||||
&& rm -rf /tmp/rkmpp /tmp/rkrga /tmp/ffmpeg-rockchip; \
|
||||
&& rm -rf /tmp/rkmpp /tmp/rkrga; \
|
||||
fi
|
||||
|
||||
# 编译 ustreamer
|
||||
RUN sed --in-place --expression 's|^#include "refcount.h"$|#include "../refcount.h"|g' /usr/include/janus/plugins/plugin.h \
|
||||
&& git clone --depth=1 https://github.com/mofeng-git/ustreamer /tmp/ustreamer \
|
||||
&& make -j$(nproc) WITH_PYTHON=1 WITH_JANUS=1 WITH_FFMPEG=1 -C /tmp/ustreamer \
|
||||
&& if [ ${TARGETARCH} = arm64 ]; then \
|
||||
make -j$(nproc) WITH_PYTHON=1 WITH_JANUS=1 WITH_FFMPEG=1 WITH_MPP=1 -C /tmp/ustreamer; \
|
||||
else \
|
||||
make -j$(nproc) WITH_PYTHON=1 WITH_JANUS=1 WITH_FFMPEG=1 -C /tmp/ustreamer; \
|
||||
fi \
|
||||
&& /tmp/ustreamer/ustreamer -v \
|
||||
&& /tmp/ustreamer/ustreamer-dump -v \
|
||||
&& cp /tmp/ustreamer/python/dist/*.whl /tmp/wheel/
|
||||
@@ -186,9 +179,8 @@ RUN mkdir /tmp/lib \
|
||||
&& find /usr/lib -name "libsrtp2.so.*" -exec cp {} /tmp/lib/ \; \
|
||||
&& find /usr/lib -name "libwebsockets.so.*" -exec cp {} /tmp/lib/ \; \
|
||||
&& if [ ${TARGETARCH} = arm64 ]; then \
|
||||
find /usr/lib -name "libav*.so.*" -exec cp {} /tmp/lib/ \; \
|
||||
&& find /usr/lib -name "libsw*.so.*" -exec cp {} /tmp/lib/ \; \
|
||||
find /usr/lib -name "libsw*.so.*" -exec cp {} /tmp/lib/ \; \
|
||||
&& find /usr/lib -name "libpostproc.so.*" -exec cp {} /tmp/lib/ \; \
|
||||
&& find /usr/lib -name "librockchip*" -exec cp {} /tmp/lib/ \; \
|
||||
&& find /usr/lib -name "librga.so.*" -exec cp {} /tmp/lib/ \; ; \
|
||||
fi
|
||||
fi
|
||||
@@ -101,7 +101,7 @@ build_target() {
|
||||
onecloud_pro_rootfs
|
||||
local arch="aarch64"
|
||||
local device_type="gpio-onecloud-pro video1"
|
||||
local network_type=""
|
||||
local network_type="systemd-networkd"
|
||||
NEED_PREPARE_DNS=true
|
||||
;;
|
||||
orangepi-zero)
|
||||
|
||||
@@ -374,6 +374,15 @@ config_oec_turbo_files() {
|
||||
echo "信息:配置 VPU 硬件编码支持..."
|
||||
run_in_chroot "sed -i 's/--h264-hwenc=disabled/--h264-hwenc=rkmpp/g' /etc/kvmd/override.yaml"
|
||||
|
||||
# 配置 rc.local 自启脚本,添加设备权限设置
|
||||
echo "信息:配置 rc.local 自启脚本..."
|
||||
run_in_chroot "cat > /etc/rc.local << 'EOF'
|
||||
#!/bin/bash
|
||||
chmod 777 /dev/mpp_service /dev/rga
|
||||
exit 0
|
||||
EOF"
|
||||
run_in_chroot "chmod +x /etc/rc.local"
|
||||
|
||||
# 替换 DTB 文件
|
||||
replace_oec_turbo_dtb
|
||||
|
||||
|
||||
@@ -110,7 +110,7 @@ install_base_packages() {
|
||||
iptables network-manager curl kmod libmicrohttpd12 libjansson4 libssl3 \\
|
||||
libsofia-sip-ua0 libglib2.0-0 libopus0 libogg0 libcurl4 libconfig9 \\
|
||||
python3-pip net-tools libavcodec59 libavformat59 libavutil57 libswscale6 \\
|
||||
libavfilter8 libavdevice59 v4l-utils libv4l-0 nano unzip && \\
|
||||
libavfilter8 libavdevice59 v4l-utils libv4l-0 nano unzip dnsmasq && \\
|
||||
apt clean && \\
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
"
|
||||
@@ -121,9 +121,9 @@ configure_network() {
|
||||
if [ "$network_type" = "systemd-networkd" ]; then
|
||||
echo "信息:在 chroot 环境中配置 systemd-networkd..."
|
||||
|
||||
# 检查是否为onecloud平台,如果是则使用随机MAC地址生成机制
|
||||
if [ "$TARGET_DEVICE_NAME" = "onecloud" ]; then
|
||||
echo "信息:为onecloud平台配置随机MAC地址生成机制..."
|
||||
# onecloud 与 onecloud-pro 均启用基于 SN 的 MAC 地址生成
|
||||
if [ "$TARGET_DEVICE_NAME" = "onecloud" ] || [ "$TARGET_DEVICE_NAME" = "onecloud-pro" ]; then
|
||||
echo "信息:为 ${TARGET_DEVICE_NAME} 平台配置基于 SN 的 MAC 地址生成机制..."
|
||||
|
||||
# 复制MAC地址生成脚本
|
||||
sudo cp "$SCRIPT_DIR/scripts/generate-random-mac.sh" "$ROOTFS/usr/local/bin/"
|
||||
@@ -140,7 +140,7 @@ configure_network() {
|
||||
systemctl enable systemd-networkd systemd-resolved && \\
|
||||
systemctl enable kvmd-generate-mac.service
|
||||
"
|
||||
echo "信息:onecloud随机MAC地址生成机制配置完成"
|
||||
echo "信息:${TARGET_DEVICE_NAME} 基于 SN 的 MAC 地址生成机制配置完成"
|
||||
fi
|
||||
else
|
||||
echo "信息:使用默认的网络管理器 (NetworkManager)..."
|
||||
@@ -181,6 +181,7 @@ configure_system() {
|
||||
cat /One-KVM/configs/os/sudoers/v2-hdmiusb >> /etc/sudoers && \\
|
||||
cat /One-KVM/configs/os/udev/v2-hdmiusb-rpi4.rules > /etc/udev/rules.d/99-kvmd.rules && \\
|
||||
echo 'libcomposite' >> /etc/modules && \\
|
||||
echo 'net.ipv4.ip_forward = 1' > /etc/sysctl.d/99-kvmd-extra.conf && \\
|
||||
mv /usr/local/bin/kvmd* /usr/bin/ || echo '信息:/usr/local/bin/kvmd* 未找到或移动失败,可能已在/usr/bin' && \\
|
||||
cp -r /One-KVM/configs/os/services/* /etc/systemd/system/ && \\
|
||||
cp /One-KVM/configs/os/tmpfiles.conf /usr/lib/tmpfiles.d/ && \\
|
||||
@@ -193,8 +194,8 @@ configure_system() {
|
||||
sed -i 's/8080/80/g' /etc/kvmd/override.yaml && \\
|
||||
sed -i 's/4430/443/g' /etc/kvmd/override.yaml && \\
|
||||
chown kvmd -R /var/lib/kvmd/msd/ && \\
|
||||
systemctl enable kvmd kvmd-otg kvmd-nginx kvmd-vnc kvmd-ipmi kvmd-webterm kvmd-janus kvmd-media && \\
|
||||
systemctl disable nginx && \\
|
||||
systemctl enable dnsmasq kvmd kvmd-otg kvmd-nginx kvmd-vnc kvmd-ipmi kvmd-webterm kvmd-janus kvmd-media && \\
|
||||
systemctl disable nginx systemd-resolved && \\
|
||||
rm -rf /One-KVM
|
||||
"
|
||||
}
|
||||
|
||||
@@ -1,12 +1,45 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 为onecloud平台生成随机MAC地址的一次性脚本
|
||||
# 此脚本在首次开机时执行,为eth0网卡生成并应用随机MAC地址
|
||||
# 为玩客云/玩客云Pro 平台生成 MAC 地址的一次性脚本
|
||||
# 此脚本在首次开机时执行,为 eth0 网卡生成并应用基于 SN 的 MAC 地址,失败时回退到随机 MAC
|
||||
|
||||
set -e
|
||||
|
||||
NETWORK_CONFIG="/etc/systemd/network/99-eth0.network"
|
||||
LOCK_FILE="/var/lib/kvmd/.mac-generated"
|
||||
PLATFORM_FILE="/usr/share/kvmd/platform"
|
||||
EFUSE_SYSFS_PATH=""
|
||||
SN_PREFIX=""
|
||||
SN_EXPECTED_LENGTH=13
|
||||
|
||||
# 按平台设置 EFUSE 与 SN 参数;未知平台时按 efuse 路径探测
|
||||
detect_platform_params() {
|
||||
local platform=""
|
||||
if [ -f "$PLATFORM_FILE" ]; then
|
||||
platform=$(tr -d '\n' < "$PLATFORM_FILE")
|
||||
fi
|
||||
|
||||
case "$platform" in
|
||||
onecloud)
|
||||
EFUSE_SYSFS_PATH="/sys/bus/nvmem/devices/meson8b-efuse0/nvmem"
|
||||
SN_PREFIX="OCP"
|
||||
;;
|
||||
onecloud-pro)
|
||||
EFUSE_SYSFS_PATH="/sys/devices/platform/efuse/efuse0/nvmem"
|
||||
SN_PREFIX="ODC"
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -z "$EFUSE_SYSFS_PATH" ] || [ -z "$SN_PREFIX" ]; then
|
||||
if [ -e "/sys/devices/platform/efuse/efuse0/nvmem" ]; then
|
||||
EFUSE_SYSFS_PATH="/sys/devices/platform/efuse/efuse0/nvmem"
|
||||
SN_PREFIX="ODC"
|
||||
elif [ -e "/sys/bus/nvmem/devices/meson8b-efuse0/nvmem" ]; then
|
||||
EFUSE_SYSFS_PATH="/sys/bus/nvmem/devices/meson8b-efuse0/nvmem"
|
||||
SN_PREFIX="OCP"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# 检查是否已经执行过
|
||||
if [ -f "$LOCK_FILE" ]; then
|
||||
@@ -14,10 +47,29 @@ if [ -f "$LOCK_FILE" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 生成随机MAC地址 (使用本地管理的MAC地址前缀)
|
||||
# 生成MAC地址函数
|
||||
generate_random_mac() {
|
||||
# 使用本地管理的MAC地址前缀 (第二位设为2、6、A、E中的一个)
|
||||
# 这样可以避免与真实硬件MAC地址冲突
|
||||
detect_platform_params
|
||||
# 尝试根据 SN 生成唯一 MAC 地址
|
||||
if [ -f "$EFUSE_SYSFS_PATH" ]; then
|
||||
sn_offset=$(grep --binary-files=text -boP "$SN_PREFIX" "$EFUSE_SYSFS_PATH" | head -n1 | cut -d: -f1)
|
||||
if [ -n "$sn_offset" ]; then
|
||||
sn=$(cat "$EFUSE_SYSFS_PATH" | dd bs=1 skip="$sn_offset" count="$SN_EXPECTED_LENGTH" 2>/dev/null)
|
||||
if [ ${#sn} -eq $SN_EXPECTED_LENGTH ]; then
|
||||
echo "S/N: $sn" >&2 # 输出到 stderr,避免干扰返回值
|
||||
# 使用 SN 的 SHA-256 哈希生成后 5 字节(避免多余管道)
|
||||
sn_hash=$(printf %s "$sn" | sha256sum | cut -d' ' -f1)
|
||||
# 直接用 Bash 子串获取哈希末 10 个字符并插入分隔符
|
||||
mac_hex=${sn_hash: -10}
|
||||
mac_suffix=$(printf "%s:%s:%s:%s:%s" "${mac_hex:0:2}" "${mac_hex:2:2}" "${mac_hex:4:2}" "${mac_hex:6:2}" "${mac_hex:8:2}")
|
||||
printf "02:%s\n" "$mac_suffix"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# 若 SN 获取失败,回退到随机逻辑
|
||||
echo "警告: 无法获取 SN,回退到随机 MAC 生成" >&2
|
||||
printf "02:%02x:%02x:%02x:%02x:%02x\n" \
|
||||
$((RANDOM % 256)) \
|
||||
$((RANDOM % 256)) \
|
||||
@@ -26,12 +78,18 @@ generate_random_mac() {
|
||||
$((RANDOM % 256))
|
||||
}
|
||||
|
||||
echo "正在为onecloud生成随机MAC地址..."
|
||||
echo "正在生成基于 SN 的 MAC 地址..."
|
||||
|
||||
# 生成新的MAC地址
|
||||
NEW_MAC=$(generate_random_mac)
|
||||
echo "生成的MAC地址: $NEW_MAC"
|
||||
|
||||
# 验证 MAC 地址格式
|
||||
if ! [[ $NEW_MAC =~ ^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}$ ]]; then
|
||||
echo "错误: 生成的 MAC 地址格式无效: $NEW_MAC"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 备份原配置文件
|
||||
if [ -f "$NETWORK_CONFIG" ]; then
|
||||
cp "$NETWORK_CONFIG" "${NETWORK_CONFIG}.backup"
|
||||
@@ -58,7 +116,7 @@ echo "MAC地址生成时间: $(date)" > "$LOCK_FILE"
|
||||
# 禁用此服务,确保只运行一次
|
||||
systemctl disable kvmd-generate-mac.service
|
||||
|
||||
echo "随机MAC地址生成完成: $NEW_MAC"
|
||||
echo "MAC地址生成完成: $NEW_MAC"
|
||||
echo "服务已自动禁用,下次开机不会再执行"
|
||||
|
||||
exit 0
|
||||
exit 0
|
||||
Reference in New Issue
Block a user