日志

  • Ubuntu安装MariaDB 11.4.12

    Ubuntu二进制安装MariaDB

    Ubuntu\Kylin\UOS\openEuler\Debian 安装MariaDB 11.4.12

    重要提示:

    • MariaDB 二进制包 只有x86_64版本,其他架构请使用MySQL安装包。

    以下是详细的步骤:

    步骤 1:准备工作

    1. (可选)更新系统并安装依赖 首先确保你的系统是最新的,并安装编译和运行 MariaDB 所必需的库。

    2. 创建系统用户和组 MariaDB 需要一个专用的用户和组来运行。

    3. 下载 MariaDB 11.4.12 二进制 Tarball 访问 MariaDB 官方下载页面 获取准确的下载链接。使用 wget 下载到 /tmp 目录。

    4. 解压并移动到标准位置 通常,这类软件会被安装在 /usr/local 目录下。

    5. 创建符号链接 创建一个便于管理的符号链接,这样未来升级版本时会更容易。

    步骤 2:初始化数据库

    • 这是最关键的一步,它会生成初始的系统数据库和 root 用户的临时密码。
      • --user: 指定运行 MariaDB 的用户。

      • --basedir: MariaDB 的基本安装目录。

      • --datadir: 数据库文件(你的所有数据)存放的目录。请确保此目录有足够的空间!

    步骤 3:配置 MariaDB

    • 编辑配置文件

      编辑 /etc/my.cnf,在 [mysqld] 部分明确指定 basedirdatadir

      [mysqld] 部分添加/修改以下行:

    步骤 4:配置系统服务

    1. 复制服务文件

      使用自带的 mysql.server 脚本作为服务管理的基础。

    2. 启用并启动服务

      使用 systemctl 来管理服务。

    3. 检查服务状态 确保 MariaDB 已经成功启动。

      如果状态显示为 active (running),则表示服务已成功启动。

    步骤 5:安全设置与测试

    1. 测试登录 使用新设置的密码尝试登录 MySQL 客户端。

      输入密码后,如果看到 MariaDB [(none)]> 提示符,恭喜你!安装成功了(CTRL+D退出)。

    步骤 6:将 MySQL 客户端添加到 PATH(可选)

    为了方便,你可以将 MariaDB 的二进制文件路径(如 mysql, mysqladmin)添加到系统的 PATH 环境变量中。

    现在,你可以在任何目录直接使用mariadb命令了。


    (可选)步骤:设置 root 同时支持 socket 和密码登录

    如果你的 MariaDB 版本为 10.4 及以上,可以直接:

  • docker compose迁移我的WordPress

    root@lotro:/home# cat docker-compose.yml 
    services:
    
      caddy:
        image: caddy:2-alpine
        container_name: caddy
        restart: unless-stopped
        ports:
          - "80:80"
          - "443:443"
          - "443:443/udp"     # http3 支持(可选)
        volumes:
          - /home/caddy/Caddyfile:/etc/caddy/Caddyfile
          - /home/caddy/data:/data
          - /home/caddy/config:/config
          - /home/wwwroot:/srv:ro           # 全部网站放在这里(只读更安全)
        networks:
          - wp-net
    
      wordpress:
        image: wordpress:php8.3-fpm-alpine   # 2025-2026 推荐使用 php8.3 或更高
        container_name: wp-lotro
        restart: unless-stopped
        depends_on:
          - db
        volumes:
          - /home/wwwroot/lotro.cc:/var/www/html
          - ./php/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
        networks:
          - wp-net
    
      db:
        image: mysql:8.0
        container_name: mysql-lotro
        restart: unless-stopped
        environment:
          MYSQL_ROOT_PASSWORD: root密码
          MYSQL_DATABASE: 数据库名
          MYSQL_USER: 数据库用户名
          MYSQL_PASSWORD: 数据库密码
        volumes:
          - /home/mysql:/var/lib/mysql
        networks:
          - wp-net
    
    networks:
      wp-net:
        driver: bridge
    root@lotro:/home# cat caddy/Caddyfile 
    lotro.cc, www.lotro.cc {
    	tls lotro@live.cn
    	root * /srv/lotro.cc
    	php_fastcgi wordpress:9000 {
    		root /var/www/html
    		env PATH_INFO {path}
    		dial_timeout 5s
    		read_timeout 360s
    		write_timeout 360s
    	}
    
    	# 静态文件直接 serve(php_fastcgi 已经处理了大部分 rewrite)
    	file_server
    
    	# 压缩
    	encode zstd gzip
    
    	# 安全响应头(推荐)
    	header {
    		X-Frame-Options SAMEORIGIN
    		X-Content-Type-Options nosniff
    		Strict-Transport-Security "max-age=31536000;"
    		Referrer-Policy strict-origin-when-cross-origin
    		-Server
    	}
    }
    # 停掉 mysql 容器
    docker compose down
    
    # 修改目录所有者
    chown -R 999:999 /home/mysql
    chown -R 82:82 /home/wwwroot/lotro.cc
    
    # 目录权限
    find /home/wwwroot/lotro.cc -type d -exec chmod 750 {} \;
    find /home/wwwroot/lotro.cc -type f -exec chmod 640 {} \;
    
    # 再启动
    docker compose up -d
  • 在 Alpine Linux 上搭建一个仅用于 Windows NCSI 探测的 HTTP 文件服务

    adduser -D -H -s /sbin/nologin ncsi
    id ncsi
    mkdir -p /srv/ncsi
    echo "Microsoft Connect Test" > /srv/ncsi/test.txt
    chown -R root:ncsi /srv/ncsi
    chmod 755 /srv/ncsi
    chmod 444 /srv/ncsi/test.txt
    cat <<'EOF' > /etc/init.d/ncsi-http
    #!/sbin/openrc-run
    
    name="NCSI minimal http probe"
    description="Minimal HTTP server for Windows NCSI probing"
    
    command="/usr/sbin/httpd"
    command_args="-p 0.0.0.0:80 -h /srv/ncsi -u ncsi"
    
    depend() {
        need net
    }
    EOF
    chmod +x /etc/init.d/ncsi-http
    apk add busybox-extras
    which httpd
    rc-update add ncsi-http default
    rc-service ncsi-http start
    rc-service ncsi-http status
    ps aux | grep '[h]ttpd'
    apk add curl
    curl -i http://127.0.0.1/test.txt

    1️⃣ 配置 Windows 注册表

    路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet

    EnableActiveProbing = 1
    ActiveWebProbeHost = <Alpine-IP>
    ActiveWebProbePath = /test.txt

  • 零刻ME+飞牛OS+KODI=NAS+HTPC+WIFI+Switch

    新入的零刻和飞牛联合出品ME MINI,计划使用场景是放在客厅电视下当HTPC+NAS+双口交换机+WIFI热点

    第一步,装KODI,配上15元的万能遥控器,直接播放高清资源和IPTV组播。通过ssh连上飞牛OS,执行如下命令。

    sudo mkdir /home/$USER
    sudo chown $USER -R /home/$USER
    sudo usermod -a -G cdrom,audio,render,video,plugdev,users,dialout,dip,input $USER
    groups $USER #查看所属用户组
    cd /lib/firmware/i915
    sudo wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/i915/bmg_dmc.bin
    sudo wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/i915/xe2lpd_dmc.bin
    sudo update-initramfs -u -k all
    sudo apt update
    sudo apt -y install flatpak
    sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
    #flatpak remotes #验证remote
    sudo flatpak -y install flathub tv.kodi.Kodi
    #flatpak override --user tv.kodi.Kodi --device=all #给kodi添加设备(可选)
    #flatpak override --user tv.kodi.Kodi --filesystem=/vol1/1000 #添加本地资源访问权限
    flatpak run tv.kodi.Kodi
    
    #echo "*.warning  @180.167.245.234" | sudo tee -a /etc/rsyslog.conf #收集警告日志
    
    cat <<EOF | sudo tee /etc/systemd/system/kodi.service # 此行到下方EOF连续
    [Unit]
    Description=Kodi Flatpak
    After=graphical.target
    
    [Service]
    Type=simple
    ExecStartPre=-/bin/sleep 11
    ExecStart=/usr/bin/flatpak run tv.kodi.Kodi
    User=$USER
    Restart=always
    
    [Install]
    WantedBy=default.target
    EOF
    
    sudo systemctl daemon-reload
    sudo systemctl enable kodi.service
    sudo reboot
    sudo systemctl start kodi.service #如果提示未能启动X请尝试重新连接ssh再试。

    第二步:双网口+热点

    1、安装必要软件

    sudo apt update
    sudo apt install hostapd dnsmasq

    2、编辑sudo nano /etc/network/interfaces配置

    # Loopback
    auto lo
    iface lo inet loopback
    
    # Bridge 接口(enp1s0 + enp2s0)
    auto br0
    iface br0 inet dhcp
        bridge_ports enp1s0 enp2s0
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0
    
    # Wi-Fi 热点接口(wlo1)
    auto wlo1
    iface wlo1 inet static
        address 10.42.0.1
        netmask 255.255.255.0
    up iptables -t nat -A POSTROUTING -o wg0 -s 10.42.0.0/24 -j MASQUERADE
    up iptables -A FORWARD -i wg0 -o wlo1 -m state --state RELATED,ESTABLISHED -j ACCEPT
    up iptables -A FORWARD -i wlo1 -o wg0 -j ACCEPT
    up iptables -t nat -A POSTROUTING -o br0 -s 10.42.0.0/24 -j MASQUERADE
    up iptables -A FORWARD -i br0 -o wlo1 -m state --state RELATED,ESTABLISHED -j ACCEPT
    up iptables -A FORWARD -i wlo1 -o br0 -j ACCEPT

    3、编辑sudo nano  /etc/hostapd/hostapd.conf配置

    interface=wlo1
    driver=nl80211
    ssid=MeMini_AP
    hw_mode=g
    channel=6
    ieee80211n=1
    ht_capab=[HT40+]
    wmm_enabled=1
    auth_algs=1
    ignore_broadcast_ssid=0
    wpa=2
    wpa_passphrase=12345678
    wpa_key_mgmt=WPA-PSK
    rsn_pairwise=CCMP
    max_num_sta=15
    beacon_int=100
    rts_threshold=2347

    4、告诉系统 hostapd 配置文件位置sudo nano /etc/default/hostapd

    # 修改 #DAEMON_OPTS=""
    DAEMON_CONF="/etc/hostapd/hostapd.conf"

    5、编辑sudo nano /etc/dnsmasq.d/hotspot.conf服务

    interface=wlo1
    dhcp-range=10.42.0.10,10.42.0.50,12h
    dhcp-option=3,10.42.0.1   # 网关
    dhcp-option=6,10.42.0.1   # DNS

    6、启用服务

    sudo systemctl unmask hostapd
    sudo systemctl enable hostapd
    sudo systemctl enable dnsmasq

    7、关闭NetworkManager,添加计划任务sudo crontab -e

    @reboot	sleep 300 && systemctl stop NetworkManager

    8、重启设备sudo reboot,可以连上热点MeMini_AP密码12345678

    实测这块CNVi: Wi-Fi (Wi-Fi 6 AX101NGW)网卡的上下行速率只有25-55Mbps左右

  • 救援模式安装AlpineLinux

    参考官方:Replacing non-Alpine Linux with Alpine remotely

    一、进入救援模式:

    二、在VNC界面操作下载Alpine写入硬盘

    wget dl-cdn.alpinelinux.org/alpine/v3.5/releases/x86_64/alpine-virt-3.5.2-x86_64.iso

    把image写入硬盘/dev/vda

    dd if=alpine-virt-3.5.2-x86_64.iso of=/dev/vda

    重启,从本地硬盘启动,Alpine当前运行在ram里,登录root,剥离硬盘后格式硬盘并安装alpine

    mkdir /media/setup
    cp -a /media/vda/* /media/setup
    mkdir /lib/setup
    cp -a /.modloop/* /lib/setup

    卸载modloop和media文件夹

    rc-service modloop stop
     umount /dev/vda

    将文件移回原位

    mv /media/setup/* /media/vda/
    mv /lib/setup/* /.modloop/

    最后就可以格式化硬盘,安装alpine了

    setup-disk或者setup-alpine

    自定义分区安装alpine

    参考文章:https://docs.alpinelinux.org/user-handbook/0.1a/Installing/manual.html

    参考文章:https://wiki.alpinelinux.org/wiki/Bootloaders

    apk add lsblk e2fsprogs cfdisk
    mdev -s
    mkfs.ext4 /dev/sda1
    mkfs.ext4 /dev/sda2
    mkswap /dev/sda3
    mkfs.ext4 /dev/sda4
    mount /dev/sda2 /mnt -t ext4
    mkdir /mnt/boot
    mount /dev/sda1 /mnt/boot -t ext4
    swapon /dev/sda3
    setup-disk -m sys /mnt
    dd bs=440 if=/usr/share/syslinux/mbr.bin of=/dev/sda
    reboot
  • 手机IKEv2 VPN拨号访问内网资源

    参考文档:

    一、网络及服务器环境:

    • 公网IP,可以是固定IP或DDNS
    • OS: Debian 12 Kernel: 6.1.0-17-amd64 

    二、网络配置:

    • 网关映射udp:500udp:4500这些端口和协议给内网Debian12
    • 如果需要访问的内部资源IP与Debian12不在同一个网段,需要做静态路由把rightsourceip指向Debian12

    三、安装strongSwan

    apt安装:sudo apt install strongswan-starter

    或者编译安装,两种安装方式默认的etc配置路径有所不同,注意区分。

    wget https://download.strongswan.org/strongswan-5.9.14.tar.bz2
    tar xjf strongswan-5.9.14.tar.bz2
    cd strongswan-5.9.14
    ./configure --enable-ikev2 --enable-openssl --enable-systemd --with-systemdsystemunitdir=/lib/systemd/system --enable-charon --enable-random --enable-nonce --enable-aes --enable-sha1 --enable-sha2 --enable-pem --enable-pkcs1 --enable-curve25519 --enable-gmp --enable-x509 --enable-curl --enable-revocation --enable-hmac --enable-kdf --enable-stroke --enable-kernel-netlink --enable-socket-default --enable-fips-prf --enable-eap-mschapv2 --enable-eap-identity --enable-updown --disable-defaults
    make
    sudo make install

    四、acme申请证书

    acme.sh --issue -d lotro.cc -k 3072 --cert-file /usr/local/etc/ipsec.d/certs/lotro.cc.cer --key-file /usr/local/etc/ipsec.d/private/lotro.cc.key --ca-file /usr/local/etc/ipsec.d/cacerts/ca.cer --reloadcmd "sudo ipsec reload"

    五、配置 ipsec.conf

    sudo nano /usr/local/etc/ipsec.conf
    config setup
    	uniqueids = never
    conn %default
    	keyexchange=ike
    conn rw
    	leftsubnet=192.168.55.0/24      # 需要访问的内网资源
    	leftcert=lotro.cc.cer           # acme申请的签名ssl证书
    	leftid=lotro.cc                 # 必须等于ssl证书的主机名
    	leftsendcert=yes
    	rightauth=eap-mschapv2          # 采用用户名密码验证
    	rightsourceip=192.168.100.128/25  # 分配给手机端的虚拟IP段
    	auto=add

    认证密钥key

    sudo nano /usr/local/etc/ipsec.secrets
    # /usr/local/etc/ipsec.secrets - strongSwan IPsec secrets file
    admin : EAP "admin"   # 用户名和密码

    重启 sudo ipsec reload

    六、移动端配置

    • 类型:IKEv2
    • 服务器地址:lotro.cc
    • 远程ID「服务器ID」:lotro.cc
    • 本地ID「IPSec标识符」:(可不填,服务端默认%any,服务端根据不同用户匹配资源)
    • 用户名:admin
    • 密码:admin
    • 代理:关闭


    PS:以下是swanctl.conf方式配置strongSwan具体配置,效果同上

    sudo apt install build-essential pkg-config libsystemd-dev libssl-dev
    
    wget https://download.strongswan.org/strongswan-5.9.14.tar.bz2
    tar xjf strongswan-5.9.14.tar.bz2
    cd strongswan-5.9.14
    
    ./configure --prefix=/usr --sysconfdir=/etc --disable-defaults --disable-charon --disable-stroke --enable-systemd --with-systemdsystemunitdir=/lib/systemd/system --enable-ikev2 --enable-swanctl --enable-openssl --enable-nonce --enable-random --enable-pem --enable-x509 --enable-kernel-netlink --enable-socket-default --enable-eap-identity --enable-eap-mschapv2 --enable-updown
    make
    sudo make install
    
    acme.sh --issue -d lotro.cc -k 2048 --cert-file /etc/swanctl/x509/lotro.cc.cer --key-file /etc/swanctl/private/lotro.cc.key --ca-file /etc/swanctl/x509ca/ca.cer --reloadcmd "sudo swanctl -q"
    
    /etc/swanctl/x509ca/ca.cer
    /etc/swanctl/x509/lotro.cc.cer
    /etc/swanctl/private/lotro.cc.key
    
    /etc/swanctl/conf.d/v.conf
    connections {
      conn-eap {
        pools = ipv4
        send_cert = always
        local {
          auth = pubkey
          certs = lotro.cc.cer
          id = lotro.cc
        }
        remote {
          auth = eap-mschapv2
          eap_id = %any
        }
        children {
          eap {
            local_ts = 192.168.55.0/24
          }
        }
      }
    }
    
    pools {
      ipv4 {
        addrs = 192.168.100.128/25
      }
    }
    
    secrets {
      eap-admin {
        id = admin
        secret = admin
      }
    }