分类 电脑 下的文章

用电脑摄像头照人像,OBS Studio 推流, nginx 作流服务端,直播

需求:想让别人看到我在电脑上的操作界面。

步骤:

  1. apt install libnginx-mod-rtmp # 在debian 11里安装nginx的rtmp模块
  2. 在合适的位置,如nginx.conf文件中,添加以下内容,目的是启用rtmp直播及hls

    rtmp {
    server {
        listen 1935;
        application live {
            live on;
            interleave on;
    
            hls on;
            hls_path /var/www/hls;
            hls_fragment 15s;
        }
    }
    }
  3. 添加相关的站点设置内容,如:

    server {
        listen 443 ssl http2;
        listen [::]:443 ssl;
    
        ssl_certificate           /etc/nginx/ssl/fullchain.cer;
        ssl_certificate_key       /etc/nginx/ssl/anqun.org.key;
    
        server_name hls.anqun.org;
        root /var/www/hls;
    }
    
    server {
        listen 80;
        listen [::]:80;
    
        server_name hls.anqun.org;
        return 301 https://$server_name$request_uri;
    }
  4. 下载ckplayer,放到站点目录中,添加 index.html 文件,内容如下。其中kf.m3u8是obs直播时推送的串流密钥

    <html>
    <head>
        <link rel="stylesheet" type="text/css" href="ckplayer/css/ckplayer.css">
        <script type="text/javascript" charset="utf-8" src="ckplayer/js/ckplayer.js"></script>
    </head>
    <body>
        <div class="video" ></div>
        <script type="text/javascript">
            //定义一个变量:videoObject,用来做为视频初始化配置
    var videoObject = {
    container: '.video', //容器的ID或className
    live:true,//指定为直播
    plug:'hls.js',//使用hls.js插件播放m3u8
    video:'/kf.m3u8'//视频地址
    }
    new ckplayer(videoObject);
        </script>
    </body>
    </html>
  5. obs的“推流”设置:服务器为“rtmp://hls.anqun.org/live”;串流密钥为“kf”(这里是测试,所以密钥设置得很简单)
  6. 如果顺利,用vlc播放器可以直接播放rtmp://hls.anqun.org/live/kf 的网络地址;其它端可以通过浏览器访问https://hls.anqun.org 播放
  7. 本地测试,浏览器播放约有1分钟的延迟

dn_obs-live_1.png

dn_obs-live_2.png

参考:

打网线水晶头

前几天,本地电信有人打电话来,说因为我是电信老用户,可免费将我的宽带速率升到三百兆,免费用两年。我当前的套餐是二十兆特惠价的宽带。其实早先在实际使用过程中,我就知道下载速率是一百兆,免费升级了的。这次,电信主动打电话来又免费升级,我当然乐意接受。

重启光猫后,我在电脑浏览器里测速,顶多一百兆,不是三百兆。我想了又想,恍然大悟:本栋楼加装电梯后,将弱电井的光纤线移位了。当时我为了方便,屋外的光纤是钻孔放到厅的角几上,宽带再经角几上的一条网线从网线面板回到屋内的弱电箱,弱电箱的网线再到各只房间。电信装机师傅装光猫时,一定要求开通IPTV照相完工,所以师傅是将角几的一条网线一分为二,电脑和IPTV各自使用一条网线中的四条线芯(见图1)。弱电箱里的线也相应使用网线中的四条线芯接驳。在百兆的使用环境中,这样是可以的。但要使用网线的传输速度超过100Mbps,就必须使用网线的全部八条线芯。我感叹,都话世事多变,连里几条网线也系在这十年间变来变去的:因加装电梯需求变、因电信IPTV接口变、现在又要因升级速率变。具体变化是:网线打了水晶头后,又被剪掉直接驳铜线,现在又要驳开铜线打回水晶头。来来回回。

电信升级宽带速率后,如果是超过一百兆的,首先要需要检查光猫的网线口是否支持千兆,然后检查网线是否支持千兆,再检查连在网线上的设备(交换机、或电脑网卡)是否支持千兆。如果是干路上的网线或设备有一个不支持千兆,那么终端的设备也不能获得超过100Mbps的速率,这就是他们说的“木桶效应”——以最低速率的为实际使用值。

虽然300Mbps是100Mbps的三倍,假如要花钱升级,我是不愿意的。平时用电脑,我就是看看网页,下载些小文件,一百兆也够用了的。偶尔下载超过10GB大小的游戏文件时,我会有点心急,觉得下载要等嘅久。为了体验这300Mbps的新速度,我替换了一条网线,打了六个网线水晶头。以前我是挺喜欢打网线水晶头的,因为有成就感啊:一般人没有这专打水晶头用的网线钳。不过,时代在变化,现在新装修的房子,基本上也不用打水晶头了,因为有网线的插口面板,如同墙上插座的面板,将线用手指按压咬合网线线芯后就可以了。

今天我开始动手打水晶头,忘记了线序,不得不在手机上搜索示例,按“白橙、橙、白绿、蓝、白蓝、绿、白棕、棕”的口诀背,再依着顺序排线,打上水晶头。打第一、第二个还好,要打第三个水晶头时,我已经有点不耐烦了。心里想,这多枯燥啊,手指头都要搓疼。有一条网线,是测得第4条线芯信号不通。我截掉旧水晶头,重新打一个水晶头,一测还是第4条线芯不亮灯。我只好倒转来,截掉网线另一端的水晶头,再换上新的。又来测试,我去,好家伙,仅三个灯亮,这新做的水晶头还不如旧水晶头呢。我发了脾气,气冲冲地用左手顺着网线用力拽,硬打硬要将网线从咬合的水晶头拔出来般。拽了一次没拽出来,我又接着拽了两次。我捏着网线的水晶头看,噢,网线皮套被我从水晶头拉出来了。我又用网线钳,着力再钳了两次,要将水晶头里的铜片往网线线芯再压压,力求水晶头的铜片和网线铜芯接触良好。哎呀,果真,现在网线八个测试灯都会闪亮了。我不敢说这是“大力出神奇”,因为我觉得这是质量问题,要么是材料和工具(水晶头、网线钳)有问题,要么是我手艺差。但我不想加工,不想再截、再打水晶头了,我还要煲饭的呢。我自我安慰,这系自家用的,不嫌。如果以后上不了网,我知道是哪条网线捣鬼就行。

两年后,电信是否会要求我为这三百兆速率的宽带多付些钱,我不知道。按我现在的想法,我宁愿按现有的包年价(360元)续用,一百兆就一百兆。

ubuntu 22.04 - jammy - autoinstall - pxe 自动安装

上一篇,测试了 debian 11 的pxe自动安装:https://liujia.anqun.org/index.php/archives/3994/ 。 这里想试试 ubuntu 22.04的。

  1. /srv/tftp/os-images/bullseye/netboot/pxelinux.cfg/01-08-00-27-49-b4-6c # 偷懒,直接使用 debian 11 netboot 中的 pxelinux 文件。仅对pxelinux的配置文件内容做改动。其中 vmlinuz 和 initrd 是从 ubuntu-22.04.1-live-server-amd64.iso 提取到的。http://192.168.3.1/jammy/ 中有 user-data 和 meta-data 配置文件

    DEFAULT linux
     SAY Now booting the kernel from SYSLINUX...
    LABEL linux
    #  KERNEL debian-installer/amd64/linux
    #  APPEND auto=true hostname=auto2 domain=local preseed/url=tftp://192.168.3.1/os-images/bullseye/preseed.cfg initrd=debian-installer/amd64/initrd.gz
    
    KERNEL http://192.168.3.1/jammy/vmlinuz
    INITRD http://192.168.3.1/jammy/initrd
    APPEND ip=dhcp autoinstall ds=nocloud-net;s=http://192.168.3.1/jammy/ url=http://192.168.3.1/jammy/ubuntu-22.04.1-live-server-amd64.iso
  2. http://192.168.3.1/jammy/user-data # 自动安装的应答文件内容,这里仅设置用户及安装openssh-server

    #cloud-config
    autoinstall:
     identity:
    hostname: jammy2
    password: $6$5lpwCLsKLEzMkSJc$keOAhA6aO/5RocGThmhVA7LSNuW911Rx5HHXFEa75oGK20cEdAAgn14H5f5nGeq6QgcSyLPrWcg1.JvjXbhrN/
    username: ubuntu
     locale: zh_CN.UTF-8
     ssh:
    install-server: yes
     late-commands:
     - 'echo "ubuntu ALL=(ALL) NOPASSWD:ALL" > /target/etc/sudoers.d/ubuntu-nopw'
     - chmod 440 /target/etc/sudoers.d/ubuntu-nopw
     version: 1

遇到的问题,安装ubuntu 22.04的虚拟机分配了4GB内存,还不够用,用6GB内存后才顺利安装完成。

参考:

debian 11 网络远程自动安装测试 - pxe - preseed.cfg

如机房的机子,一般是远程管理,不方便实地用光盘或U盘安装系统,如 debian 11 是提供了完整的网络安装 netboot 文件及自动配置安装参数 preseed.cfg 的说明。

环境:用 VirtualBox 来创建两个虚拟机,A机为pxe服务所在的机子,B机当客户机。A机安装debian 11,分配两张网卡,一张公网,另一张是内网(enp0s8)

步骤:

  1. apt install dnsmasq # 在A机安装dnsmasq,为B机自动自动分配IP及网络引导启动、安装系统
  2. /etc/dnsmasq.conf # 配置文件内容。大概是设置好tftp的路径 /srv/tftp ,及为B机(传统BIOS启动)设置启动文件为 os-images/bullseye/netboot/pxelinux.0

    interface=enp0s8
    domain=debian.local
    dhcp-range=192.168.3.3,192.168.3.253,255.255.255.0,1h
    enable-tftp
    tftp-root=/srv/tftp
    # dhcp-optsfile=/etc/dnsmasq.opt
    #dhcp-match=ipxe,175
    # dhcp-boot=net:ipxe,default.ipxe
    # pxe-service=x86PC,"ipxe bios", ipxe/undionly.kpxe
    # pxe-service=tag:x86-64_efi,"ipxe efi", ipxe/ipxe.efi
    
    dhcp-match=set:bios-x86,option:client-arch,0
    # dhcp-boot=tag:bios-x86,ipxe/undionly.kpxe
    dhcp-boot=tag:bios-x86,os-images/bullseye/netboot/pxelinux.0
    
    # boot config for UEFI systems
    # dhcp-match=set:efi-x86_64,option:client-arch,7
    # dhcp-match=set:efi-x86_64,option:client-arch,9
    # dhcp-boot=tag:efi-x86_64,ipxe/ipxe.efi
    
    # dhcp-match=set:ipxe,175
    # dhcp-boot=tag:ipxe,http://192.168.3.1/boot2.php
    # dhcp-userclass=set:ENH,iPXE
    # dhcp-boot=tag:ENH,default.ipxe
  3. /srv/tftp/os-images/bullseye/netboot/pxelinux.cfg/01-08-00-27-49-b4-6c # 以B机的网卡mac地址为名创建一个pxelinux的启动配置文件内容。大概是将debian的自动应答文件preseed.cfg作为启动参数加载

    DEFAULT linux
     SAY Now booting the kernel from SYSLINUX...
    LABEL linux
     KERNEL debian-installer/amd64/linux
     APPEND auto=true hostname=auto2 domain=local preseed/url=tftp://192.168.3.1/os-images/bullseye/preseed.cfg initrd=debian-installer/amd64/initrd.gz
  4. os-images/bullseye/preseed.cfg # 文件内容。目的是自动回答安装过程中的问题,无人值守就可以完成系统安装

    #### Contents of the preconfiguration file (for bullseye). refer: https://www.debian.org/releases/bullseye/example-preseed.txt
    d-i debian-installer/locale string en_US
    d-i keyboard-configuration/xkb-keymap select us
    d-i netcfg/choose_interface select auto
    d-i netcfg/get_hostname string unassigned-hostname
    d-i netcfg/get_domain string unassigned-domain
    d-i netcfg/hostname string auto1
    d-i netcfg/wireless_wep string
    d-i mirror/country string manual
    d-i mirror/http/hostname string ftp.cn.debian.org
    d-i mirror/http/directory string /debian
    d-i mirror/http/proxy string
    d-i passwd/root-password password r00tme
    d-i passwd/root-password-again password r00tme
    d-i passwd/user-fullname string Debian User
    d-i passwd/username string debian
    d-i passwd/user-password password insecure
    d-i passwd/user-password-again password insecure
    d-i clock-setup/utc boolean true
    d-i time/zone string US/Eastern
    d-i clock-setup/ntp boolean true
    d-i partman-auto/method string lvm
    d-i partman-auto-lvm/guided_size string max
    d-i partman-lvm/device_remove_lvm boolean true
    d-i partman-md/device_remove_md boolean true
    d-i partman-lvm/confirm boolean true
    d-i partman-lvm/confirm_nooverwrite boolean true
    d-i partman-auto/choose_recipe select atomic
    d-i partman-partitioning/confirm_write_new_label boolean true
    d-i partman/choose_partition select finish
    d-i partman/confirm boolean true
    d-i partman/confirm_nooverwrite boolean true
    d-i partman-md/confirm boolean true
    d-i partman-partitioning/confirm_write_new_label boolean true
    d-i partman/choose_partition select finish
    d-i partman/confirm boolean true
    d-i partman/confirm_nooverwrite boolean true
    d-i apt-setup/cdrom/set-first boolean false
    tasksel tasksel/first multiselect standard, ssh-server
    popularity-contest popularity-contest/participate boolean true
    d-i grub-installer/only_debian boolean true
    d-i grub-installer/with_other_os boolean true
    d-i grub-installer/bootdev  string default
    d-i finish-install/reboot_in_progress note
  5. /etc/nftables.conf # 如果A机要为B机充当网关,转发上网,还需要配置一下。发现一个现象是B机有时上不了外网,要重启一下nftables服务

    #!/usr/sbin/nft -f
    
    flush ruleset
    
    table inet filter {
        chain input {
                type filter hook input priority 0;
        }
        chain forward {
                type filter hook forward priority 0;
        }
        chain output {
                type filter hook output priority 0;
        }
    }
    
    #######
    table inet nat {
        chain input {
                type nat hook input priority 0; policy accept;
                ip protocol icmp accept
        }
    
        chain prerouting {
                type nat hook prerouting priority 0; policy accept;
        }
    
        chain postrouting {
                type nat hook postrouting priority 100; policy accept;
    #               ip saddr 192.168.3.0/24 oifname "enp0s3" masquerade
                oifname "enp0s3" masquerade
        }
    
        chain output {
                type nat hook output priority 0; policy accept;
        }
    }

参考:

更新 magento2 产品索引时,elastic search 报错 - status 429

问题:magento2.4的站点,执行 bin/magento indexer:reindex 后,elastic search 报错。内容如下:

Catalog Search index process error during indexation process:
{"error":{"root_cause":[{"type":"cluster_block_exception","reason":"index [magento2_mazia_243_product_1_v45] blocked by: [TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark, index has read-only-allow-delete block];"}],"type":"cluster_block_exception","reason":"index [magento2_mazia_243_product_1_v45] blocked by: [TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark, index has read-only-allow-delete block];"},"status":429}

尝试:按网上说的,调整elastic search设置后就可以了:

curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_cluster/settings -d '{ "transient": { "cluster.routing.allocation.disk.threshold_enabled": false } }'

curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'

参考:https://stackoverflow.com/questions/63689953/magento-2-4-reindex-issue-with-elasticsearch