用户工具

站点工具


paste

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
paste [2023/10/14 09:22] – [Ignore me] rootpaste [2026/01/16 17:22] (当前版本) root
行 2: 行 2:
  
 This page is used for copy and paste sharing. This page is used for copy and paste sharing.
 +
 +<code>
 +slmgr /skms s1.kms.cx
 +slmgr /ipk FJ82H-XT6CR-J8D7P-XQJJ2-GPDD4
 +slmgr /ato
 +slmgr /xpr
 +pause
 +</code>
 +
 +===== Guacamole部署 =====
 +
 +转到guacamole
 +
 +<code bash>
 +#guacamole测试的docker,效果尚佳
 +docker run -p 6080:80 -p 5900:5900 -e VNC_PASSWORD=111222333 -v /dev/shm:/dev/shm --rm dorowu/ubuntu-desktop-lxde-vnc
 +docker run -p 8080:8080 --rm  flcontainers/guacamole
 +</code>
 +
 +
 +guacamole部署
 +<code bash>
 +docker run --name mysql --rm -e MYSQL_ROOT_PASSWORD=123456 \
 +  -p 3306:3306 -v $HOME/mysql-data:/var/lib/mysql  mysql:8
 +#-e MYSQL_ALLOW_EMPTY_PASSWORD=yes
 +docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > initdb.sql
 +
 +mysql -h localhost -u root --protocol tcp
 +> CREATE DATABASE guacamole_db;
 +> quit
 +
 +cat initdb.sql | mysql -h localhost -u root --protocol tcp guacamole_db
 +
 +docker run --rm --name guacamole    \
 +    -e GUACD_HOSTNAME=192.168.3.125 \
 +    -e GUACD_PORT=4822              \
 +    -e MYSQL_HOSTNAME=192.168.3.125 \
 +    -e MYSQL_DATABASE=guacamole_db  \
 +    -e MYSQL_USER=root              \
 +    -e MYSQL_PASSWORD=123456        \
 +    -p 8080:8080 guacamole/guacamole
 +</code>
 +
 +Guacamole debug
 +
 +<code bash>
 +./src/guacd/guacd -f -L trace -b 0.0.0.0
 +</code>
 +===== IPv6 Multicast =====
 +
 +组播与单播的区别(从应用层角度看):
 +  * 发送方发送的目的地址不是接收方的IP地址,而是**从**某link,**向**link上某组播地址的一个组,发送数据。
 +  * 接收方Bind的不是**接口的地址**+端口概念,而是Bind**接口**+端口,并从这个接口加入某组播地址的group。接收方在接收组播消息的接口上的本地地址,在应用层看来是无关紧要的。
 +
 +综上,组播调用时有以下不同:
 +  * 发送socket,发送前需要额外指定**发送组播消息的端口**,之后将组播地址与端口正常填入sockaddr_in6
 +  * 接收socket,接收前常规bind,但只有加入ipv6_mreq指定的组后才会收到该组播地址的消息。ipv6_mreq中指定了一个组播地址与其所在的interface。
 +
 +但,自己发送组播消息,自己接收时需要额外两步支持Loop:
 +  * IPV6_MULTICAST_HOPS, 指定最大hops
 +  * IPV6_MULTICAST_LOOP, 开启LOOP支持
 +
 +Tips,使用'''ip link'''查看接口的ifindex。
 +
 +样例代码
 +<code cpp>
 +//send
 +m_udpSocketSend.UseIpv6Mode(1);
 +m_udpSocketSend.Create();
 +m_udpSocketSend.SetBlocking(0);
 +
 +//像常规地址一样将组播地址与端口填入目的sockaddr_in6
 +m_udpSocketSend.SetDestIpAndPort(m_Settings.GetSendRemoteMaddrV6Str(),m_Settings.GetSendRemotePortV6());
 +
 +//指定目的组播地址所在的interface
 +int ifindex = m_Settings.GetIfIndex();
 +if (setsockopt(m_udpSocketSend.m_sock_fd, IPPROTO_IPV6, IPV6_MULTICAST_IF,
 +                &ifindex, sizeof(ifindex)) < 0)
 +{
 +    return ERROR;
 +}
 +
 +#if SVW_MULTICAST_SUPPORT_LOOP
 +int hops = 255;
 +if(setsockopt(m_udpSocketSend.m_sock_fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &hops, sizeof(hops)) < 0)
 +{
 +    LOGI("set send Socket IPV6_MULTICAST_HOPS failed.");
 +    perror("setsockopt");
 +}
 +if(setsockopt(m_udpSocketSend.m_sock_fd, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, &on, sizeof(on)) < 0)
 +{
 +    LOGI("set send Socket IPV6_MULTICAST_LOOP failed.");
 +    perror("setsockopt");
 +}
 +#endif
 +
 +//发送!!
 +m_udpSocketSend.SendMsg(&sendbuff);
 +</code>
 +
 +<code cpp>
 +//receive
 +m_udpSocketReceive.UseIpv6Mode(1);
 +m_udpSocketReceive.Create();
 +m_udpSocketReceive.SetBlocking(0);
 +if(!m_udpSocketReceive.Bind(m_Settings.GetReceivePortV6()))
 +{
 +    return ERROR;
 +}
 +
 +//join multicast group
 +struct ipv6_mreq mGroupAddr;
 +crt_memset(&mGroupAddr,0,sizeof(mGroupAddr));
 +if(!crt_inet_addr_v6(m_Settings.GetReceiveMaddrV6Str(),&mGroupAddr.ipv6mr_multiaddr))
 +{
 +    LOGI("invalidate v6 ip %s\n", m_Settings.GetReceiveMaddrV6Str());
 +    return ERROR;
 +}
 +if(m_Settings.GetIfIndex() != 0)
 +{
 +    mGroupAddr.ipv6mr_interface = m_Settings.GetIfIndex();
 +}
 +if (setsockopt(m_udpSocketReceive.m_sock_fd, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP,
 +                &mGroupAddr, sizeof(mGroupAddr)) < 0)
 +{
 +    LOGE("setting join MULTICAST group %s failed.",m_Settings.GetReceiveMaddrV6Str());
 +    return ERROR;
 +}
 +</code>
 +
 +
 +===== rsync =====
 +
 +<code bash>
 +#rsync推荐样例:
 +rsync -avIPhz  \
 +  --exclude='update-backups/*'  \
 +  --backup-dir=update-backups/`date '+%Y%m%d-%H%m'`/  \
 +  ~/cv-release/ root@remote.site:/path/to/release/
 +
 +cat >help.txt<<EOF
 +同步文件夹时,不要省略文件夹的斜杠!虽然远端的代表文件夹的斜杠可以省略。
 +
 +--backup-dir参数让任何被删除或覆盖的文件都移入指定文件夹,这个目录是远端同步目录的相对路径
 +在本例中是: root@remote.site:/path/to/release/update-backups/20231016-1654/
 +如果没有删除或覆盖的文件,则不创建该目录
 +
 +--exclude保证本机指定目录不会同步到远端。这个目录是本机同步目录的相对路径
 +在本例中是: ~/cv-release/update-backups/*
 +
 +注意,不要添加--delete!就不会删除远端任何文件,覆盖的除外。
 +
 +-a: 类似cp中的-a, 等效于-rlptgoD,
 +    分别是,递归、复制软链接、保持权限、同步修改时间、保持group一致、保持owner一致、保持设备文件一致
 +    如果,目标文件存在且无权chmod,-p(保持权限)可能权限不足;
 +    如果,目标rsync非root,-goD可能会忽略,可以考虑用-rlt替代
 +    在不指定-p保持权限时,覆盖文件会保持远端文件原权限不变,新建文件会遵从本机源文件
 +-v: verbose
 +-I: --ignore-times
 +    忽略时间与大小,一定进行哈希对比
 +-P: same as --partial --progress
 +    断点续传大文件
 +-h: --human-readable
 +-z: --compress
 +    先压缩再传输
 +EOF
 +</code>
  
 ==== Ignore me ==== ==== Ignore me ====
行 8: 行 175:
   * https://yangtu.top/   * https://yangtu.top/
   * www.lixianla.com   * www.lixianla.com
 +  * https://pan.baidu.com/share/init?surl=4uEZTpBWlBI2lvejtZjj1g&pwd=62ph
 +  * [[http://ipv6.www.dddns.icu/74d62d82a9/u1000/pt/The.Pig.the.Snake.and.the.Pigeon.2023.1080p.NF.WEB-DL.DDP5.1.H264-HHWEB/The.Pig.the.Snake.and.the.Pigeon.2023.1080p.NF.WEB-DL.DDP5.1.H264-HHWEB.mkv|The.Pig.the.Snake.and.the.Pigeon.2023.1080p]]
  
  
- +  * https://www.bilibili.com/video/BV1XN4y187zp 
 +  * https://www.bilibili.com/video/BV1Xx4y1V7JZ/ 
 +  * 调试九法
  
  
  
paste.1697275375.txt.gz · 最后更改: root