码渣十七 https://www.coder17.com/images/favicon-32x32.png 雑魚ーダーの雑魚メモ 2021-12-18T22:55:00.000Z https://www.coder17.com/ 東城十七 Hexo 微软账户验证码邮件语言变更 https://www.coder17.com/posts/ms-account-language/ 2021-12-18T22:55:00.000Z 2021-12-18T22:55:00.000Z 问题:

虽然改变了微软账户的显示语言地区等等设置,但微软发来的验证码还是变更前的语言。

如,账户语言全部设为日本:

image-20211219074328366

image-20211219074315503

此时收到的验证码以及推广邮件等依然是中文:

image-20211219074419967

原因:

搜索可以看到微软社区中有无数类似提问,但没有一个得到解决的。

image-20211219074522218

经过尝试发现,需要删除安全设置中的验证邮箱,再重新添加,才能刷新邮件通知的语言设置。

解决:

  1. 登录 微软账户安全设置页面

  2. 展开收到不同语言的验证码接受邮箱,删除之。如果提示是主邮箱不能删除,则先手动添加一个不同的邮箱,再删除原来的。

    image-20211219074941286

  3. 此时原邮箱会收到原语言的提示邮件

    image-20211219075132343

  4. 重新添加回刚才删掉的邮箱,按照提示输入收到的验证码。这次收到的验证码就已经是新的语言了,更新完成。

    image-20211219075254709

]]>
<h2 id="问题:"><a href="#问题:" class="headerlink" title="问题:"></a>问题:</h2><p>虽然改变了微软账户的显示语言地区等等设置,但微软发来的验证码还是变更前的语言。</p> <p>如,账户语言全部设为日本:</p> <
Ctrl+1 快捷键失效解决 https://www.coder17.com/posts/ctrl-1-shortcut/ 2021-10-31T06:10:00.000Z 2021-10-31T06:10:00.000Z Ctrl + 1 的快捷键如果被莫名其妙占用,可能是 IME 快捷键中英语美国的默认快捷键无法释放导致。

如果添加后删除英语美国键盘布局,可能会出现此现象。

此时即使在键盘快捷键中删除英语美国的快捷键,或者将此键盘布局重新添加后再修改快捷键,也会反复发作。

image-20211031150600311

修改注册表 HKEY_CURRENT_USER\Control Panel\Input Method\Hot Keys\ 将所有00开头的8位数字 key 全部删除,然后重启,问题可能解决。

此时可以重新设置其他快捷键。

参考: パソコン好きな人の独学ノート 入力言語のホットキーとレジストリ

]]>
<p>Ctrl + 1 的快捷键如果被莫名其妙占用,可能是 IME 快捷键中英语美国的默认快捷键无法释放导致。</p> <p>如果添加后删除英语美国键盘布局,可能会出现此现象。</p> <p>此时即使在键盘快捷键中删除英语美国的快捷键,或者将此键盘布局重新添加后再修改快捷键,也会
小方摄像头破解 rtsp https://www.coder17.com/posts/xiaofang-rtsp/ 2021-05-23T18:15:00.000Z 2021-06-26T00:18:00.000Z 适用于第一代小方。并不复杂但坑很多。

1. 降级固件到 v3.0.3.56

  • 参考 fang-hacks wiki ,在 mega 下载固件备份。(镜像
  • 格式化 SD 卡为 FAT32 后将 0.elf 重命名为 FIRMWARE_660R.bin,复制到卡根目录。
  • 插卡,用卡针按住 reset 同时摄像头上电,持续按住 15s 以上后松开。
  • 等待刷机完成,黄灯闪烁或黄蓝灯交替闪烁。如果始终没有变化,保险起见约 10min 后重新拔插电源。
  • 上电后如无语音提醒,按 reset 1s 左右,出现语音。
  • 如果自始至终黄灯常亮无反应,尝试此视频描述中的第一个固件(镜像),过后再刷一次原固件。
  • 如果反复尝试都没有反应,可能是过热等玄学问题,断电冷静一下可能就好了。

2. 连接 WiFi (二维码)

  • 参考 fang-hacks wiki ,语音提示等待连接时,配置并扫描二维码生成页面。扫描后提示正在连接,指示灯蓝黄交替,但可能不会提示连接成功。
  • 如果灯持续交替闪烁,查看路由可见摄像头反复连接断开网络。此时重新拔插摄像头电源。
  • 如果仍无改善,则暂时跳过,后面使用脚本设置。

3. 构建 SD 卡文件结构

  • 下载 fang-hacks 的 IMG 镜像,使用 Win32DiskImager 或 balenaEtcher 等工具写入 SD 卡。卡不必过大,1G 即可。

  • 写入完成后访问第一个 FAT32 分区(可能需要重新拔插读卡器),修改bootstrap/fang_hacks.cfg

    1
    2
    DISABLE_CLOUD=1
    NETWORK_MODE=1

4. 连接 WiFi (脚本)

  • 如果前面连接网络失败,Clone 设置脚本 到分区根目录,备份原有 snx_autorun.sh 并覆盖之
  • 编辑 .wifipasswd.wifissid 写入网络信息
  • 摄像头不插卡上电,等待半分钟确定启动完毕后插入卡,会出现提示音,等待半分钟后断电并拔卡后重新上电
  • 等待 WiFi 连接完成,此时蓝灯闪烁,在路由器中查看摄像头的 IP
  • 在电脑中访问 SD 卡的 FAT32 分区,恢复snx_autorun.sh ,并可删除设置脚本的其他文件

5. 执行破解脚本

  • 和4的倒数第三步相同,摄像头状态稳定后插入卡,听到提示音之后,访问 http://device-ip/cgi-bin/status

image-20210524011143324

  • 点击 Apply 执行脚本

image-20210523210054928

  • 执行完成后点击 back,此时应可使用 root 和密码 ismart12 SSH 连接 22 端口

6. 切断公网访问后的时间服务器设置

出于对中国网络服务的不信任,在路由器上切断摄像头的公网访问。此时时间不能同步,需要在内网架设一个 NTP 时间服务器,并修改部分脚本参数。

  • vi /media/mmcblk0p2/data/etc/scripts/02-ntpd 修改第三行的 time.google.com 为内网服务器地址
  • vi /media/mmcblk0p1/bootstrap/www/action 修改 155 行的地址

7. 其他

image-20210523210544967

千万不要手贱点击 Expend data partition 后的 Yes ,根据 Release Note,此处有一个已知问题,重启后将耗费非常长的时间调整分区,此时可能亮黄灯并且没有网络连接,完成后可能也没有任何提示,注意不要中途断电。我等待了一小时后断电,插入电脑发现分区调整已经完成,但插回摄像头黄灯常亮无法启动,被迫从第一步恢复固件开始重试。因此不推荐进行此操作。

8. RTSP

RTSP 地址为 rtsp://device-ip/unicast, 可以接入 ZoneMinder 或 Shinobi 等监视服务器,也可使用 MPC 和 PotPlayer 等播放器观看直播

8.1 RTSP 守护进程

RTSP 进程不太稳定,过一段时间之后查看经常显示红色 NOK,需要手动禁用后启用再重启服务才能恢复,因此需要一个守护进程自动重启。

参考这个 issue 和其中提到的 bobby 的这篇文章 (文中还提到了翻转影像等,可以参考)

  • /media/mmcblk0p2/data/usr/bin 创建 rtsp-check.sh

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/sh

    while true; do
    if pgrep -x "snx_rtsp_server" > /dev/null
    then
    :
    else
    /media/mmcblk0p2/data/etc/scripts/20-rtsp-server start
    fi
    sleep 2
    done
  • 添加执行权限 chmod +x rtsp-check.sh

  • /media/mmcblk0p2/data/etc/scripts 创建服务文件 99-rtsp-check

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #!/bin/sh
    PIDFILE="/var/run/rtsp-check.pid"

    status()
    {
    pid="$(cat "$PIDFILE" 2>/dev/null)"
    if [ "$pid" ]; then
    kill -0 "$pid" >/dev/null && echo "PID: $pid" || return 1
    fi
    }

    start()
    {
    echo "Starting rtsp-check script..."
    rtsp-check.sh </dev/null >/dev/null 2>&1 &
    echo "$!" > "$PIDFILE"
    }

    stop()
    {
    pid="$(cat "$PIDFILE" 2>/dev/null)"
    if [ "$pid" ]; then
    kill $pid || rm "$PIDFILE"
    fi
    }

    if [ $# -eq 0 ]; then
    start
    else
    case $1 in start|stop|status)
    $1
    ;;
    esac
    fi
  • 之后在 Manage Scripts 页面即可看到新添加的 99-rtsp-check 服务,启动之即可监视并自动重启挂掉的 RSTP 服务(刚启动时所有服务的PID基本临近,如果发现 RTSP 的 PID 显著变大,则说明已经被重启过)

    image-20210626091639347

9. OSD 时间显示

参考 wikiGitter

  • 下载 snx_isp_ctl镜像),复制到 /media/mmcblk0p2/data/usr/bin,加上执行权限

  • 编辑 /media/mmcblk0p2/data/etc/scripts/20-rtsp-server 脚本,在 start 函数倒数第二行添加:

    1
    snx_isp_ctl --osdset-en 1 --osdset-ts 1 --osdset-template 1234567890./-:Date --osdset-gain 2 --osdset-bgtransp 0x1 --osdset-bgcolor 0x000000 --osdset-position 0,-31

    其中最后的 --osdset-position 0,-31 用于调节 OSD 显示在左上角,去除开头的空行。如果显示出现问题可以调大 -31 的值。

10. 时区设置

  • 在网页上修改时区,格式参照 ICANN 的页面,日本时区为 JST-9 ,中国时区为 CST-8

  • 此时系统时间正确,但 OSD 使用硬件时间,仍然是 UTC 时区,此处参考这个 issue,修改/media/mmcblk0p2/data/etc/scripts/02-ntpd,在 start 函数插入一行 ntpd -q -n $NTPD_OPTS && hwclock -t,变为如下代码:

    1
    2
    3
    4
    5
    6
    start() 
    {
    echo "Starting ntpd..."
    ntpd -q -n $NTPD_OPTS && hwclock -t
    ntpd $NTPD_OPTS
    }
  • 重启摄像头,OSD 时间与系统时间均正确显示

    image-20210602031336997

]]>
<p>适用于第一代小方。并不复杂但坑很多。</p> <h2 id="1-降级固件到-v3-0-3-56"><a href="#1-降级固件到-v3-0-3-56" class="headerlink" title="1. 降级固件到 v3.0.3.56"></a>1. 降级固件到
Hyper-V 虚拟机桥接公网访问和与宿主机互访 https://www.coder17.com/posts/hyper-v-network/ 2021-05-04T22:48:00.000Z 2021-05-04T22:48:00.000Z 使用 Windows 的 Hyper-V 创建虚拟机时,其 Virtual Switch 的设置和其他虚拟机软件相比比较复杂。Virtual Switch 是不具备 DHCP 功能的交换机,因此需要按照交换机思路配置网络。

1. 桥接物理网卡访问公网

在虚拟交换机管理器中新建交换机,连接类型选择外部,并选择要桥接的物理网卡。

image-20210505073148867

给虚拟机添加网卡,并连接到这个交换机。在高级设置中可以修改桥接后网卡的 MAC 地址等。

image-20210505073413715

进入虚拟机设置 IP 地址即可桥接之,如 Ubuntu 20.02 配置为 DHCP 时:

1
sudo vim /etc/netplan/00-installer-config.yaml
1
2
3
4
5
network:
ethernets:
eth0:
dhcp4: true
version: 2

2. 与宿主机互访

在虚拟交换器管理器添加交换机,类型选择内部,注意不要直接使用自带的 Default Switch,会无法控制固定 IP。

此时在宿主机 Windows 中会出现 vEthernet 开头的,与新交换机连接的虚拟网卡。右键属性,TCP/IPv4,在 IP 地址和掩码中指定一个宿主机使用的 IP 地址和网段。

image-20210505074152587

给虚拟机添加网卡,并连接到这个交换机。在虚拟机中手动设置此网卡 IP 为同一网段,注意网关不要设置,否则会与原有公网网关冲突,跃点数默认为0时会导致断网。

Ubuntu 20.02 的配置:

1
2
3
4
5
6
7
8
network:
ethernets:
eth0:
dhcp4: true
eth1:
dhcp4: false
addresses: [192.168.99.2/24]
version: 2

此时路由表中可以看到此网段:

image-20210505074624014

]]>
<p>使用 Windows 的 Hyper-V 创建虚拟机时,其 Virtual Switch 的设置和其他虚拟机软件相比比较复杂。Virtual Switch 是不具备 DHCP 功能的交换机,因此需要按照交换机思路配置网络。</p> <h2 id="1-桥接物理网卡访问公网"
下载 m3u8 推流 https://www.coder17.com/posts/m3u8-stream-download/ 2021-02-21T11:48:00.000Z 2021-02-21T11:48:00.000Z
  • 在浏览器 Network 中查找 m3u8

    image-20210221204910267

  • 如果是上图所示嵌套,逐级打开对应 m3u8 文件,直到出现 ts 文件列表和密钥

    image-20210221205009425

  • 如果要先下载再合并,则观察 ts 文件 url 规律,使用 curl 批量下载文件

    1
    curl -O https://what-ever-[1-999].ts
  • 将 m3u8 文件下载到同一目录,并替换删除其中 url 前缀

  • 按照 URI 参数值下载 m3u8 文件中的密钥 key 文件,应为16字节长度。同时改写 m3u8 文件中 key 路径使其指向此文件

    image-20210221205501863

  • 使用 ffmpeg 批量解密合并 ts 文件即可获得 mp4 视频

    1
    ffmpeg -loglevel error -allowed_extensions ALL -i prog-index.m3u8 -c copy "output.mkv"
  • 如果要直接下载,则不需要下载 ts 文件,直接用 ffmpeg 解密 m3u8 文件

    1
    ffmpeg -loglevel error -protocol_whitelist file,http,https,tcp,tls,crypto -allowed_extensions ALL -i prog-index.m3u8 -c copy "output.mkv"
  • ]]>
    <ol> <li><p>在浏览器 Network 中查找 m3u8</p> <p> <img src="/blogimg/%E4%B8%8B%E8%BD%BD%20m3u8%20%E6%8E%A8%E6%B5%81/image-20210221204910267.png" alt
    Windows WebDAV 文件大小限制 https://www.coder17.com/posts/windows-dav-limit/ 2020-10-04T16:53:00.000Z 2020-10-04T16:53:00.000Z This sets the maximum you can download from the WebDAV to 4 GB at one time, where 4 GB is the maximum value supported by Windows OS.

    1
    2
    3
    4
    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters]
    "FileSizeLimitInBytes"=dword:ffffffff

    参考: https://docs.druva.com/Knowledge_Base/inSync/Troubleshooting/WebDAV_download_fails_with_file_size_exceeds__the_limit_error

    ]]>
    <p>This sets the maximum you can download from the WebDAV to 4 GB at one time, where 4 GB is the maximum value supported by Windows OS.</p>
    Windows Sandbox 桥接网络 https://www.coder17.com/posts/windows-sandbox-bridged/ 2020-10-04T16:34:00.000Z 2020-10-04T16:34:00.000Z 使用 Windows 10 的 Sandbox 有时需要桥接主机网络,默认启动时是 NAT 网络,无法访问主机所在网络资源。

    1. 启动 Sandbox,主机的网络管理中会出现 vEthernet (Default Switch)

    2. 按住 Ctrl 同时选择上述连接与当前联网的连接,右键选择桥接。

      image-20201005020749879

    3. 如果报错提示预想外的错误,直接确定,可以看到两个连接中有一个已经加入桥接,另一个没有。如果是图中这样只有 vEthernet 在桥接中,则删除桥接,重复上一步重新添加,否则会导致主机断网。直到不报错,或者只有当前外部连接加入桥接时为止。

      image-20201005020903542

    4. 在没有加入桥接的 vEthernet 连接上右键,选择加入桥接,即可看到两个连接均为桥接。

      image-20201005021549546

    5. 此时在沙箱中查看 IP 应该已经处于同一网段。如果不成功则关闭沙箱重开,从上一步继续。

    ]]>
    <p>使用 Windows 10 的 Sandbox 有时需要桥接主机网络,默认启动时是 NAT 网络,无法访问主机所在网络资源。</p> <ol> <li><p>启动 Sandbox,主机的网络管理中会出现 <code>vEthernet (Default Switch)</c
    Windows 10 USB 图标改变解决 https://www.coder17.com/posts/windows-10-usb-icon-fix/ 2020-08-23T15:00:00.000Z 2020-08-23T15:00:00.000Z Windows 的驱动服务器在 2019 年 11 月左右出现了一次 bug 导致所有的U盘图标均变为机柜,即使使用 autorun.inf 修改磁盘图标也无法生效,且单击弹出磁盘时,所有的设备名均变为 Device。

    20191110175553

    原因是 Windows 会联网获取设备驱动与图标,因此服务器端问题会影响本机驱动。驱动服务器问题后来已经修复,但本机已经下载的 USB 驱动还在,因此问题会残留。解决方案是删除已缓存的驱动程序。

    • 打开 C:\ProgramData\Microsoft\Windows\DeviceMetadataCache\dmrccache\en-us 如果目录下有文件,寻找在其中 DeviceInformation 目录中含有 ico2001.ico 的机柜图标的目录,并删除该目录。

    • 重启

    • 如果没有恢复,或者上述目录中没有文件,则打开控制面板,设备和打印机,删除最下面的无法识别的 Device

      image-20200824195700272

    • 重新插拔设备,应该可以恢复。此时查看上述目录,应该已经没有文件存在。弹出磁盘的菜单也应恢复显示设备名。

      image-20200824195842372 image-20200824200746369

    参考/图片:https://noushibou.hatenadiary.jp/entry/2019/11/10/101358

    ]]>
    <p>Windows 的驱动服务器在 2019 年 11 月左右出现了一次 bug 导致所有的U盘图标均变为机柜,即使使用 <code>autorun.inf</code> 修改磁盘图标也无法生效,且单击弹出磁盘时,所有的设备名均变为 Device。</p> <p><img sr
    Nextcloud 新建用户报错 https://www.coder17.com/posts/nextcloud-new-user-error/ 2020-08-12T17:31:00.000Z 2020-08-12T17:31:00.000Z Nextcloud 新建用户时,日志提示错误:

    1
    Call to a member function getSize() on bool

    导致用户列表无法显示,且新用户无法登录。

    原因是用户配额和 quota_include_external_storage 设置之间有冲突。

    绕过方案为:

    • 修改/var/www/html/config/config.php

      1
      ‘quota_include_external_storage’ => false,
    • 此时用户列表可以显示,删除新建的出错用户

    • 重新添加新用户,配额容量无限制

    • 以新用户身份登陆一次,确认文件正常

    • quota_include_external_storage 改回去

    • 根据需求限制新用户配额

    此时新用户可正常使用。

    当共享大量文件给新用户时,由于被共享文件也计入用户配额使用,因此可能提示配额超限。

    此外如果共享文件的 owner 曾出现误报存储已满问题时,即使通过修改 quota_include_external_storage 解决,被共享用户在进入共享文件目录时也仍会提示其他用户存储满。暂时无法解决,无实际影响可忽略。

    image-20200813023129134

    ]]>
    <p>Nextcloud 新建用户时,日志提示错误:</p> <figure class="highlight pgsql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td>
    Nextcloud 误报存储已满 https://www.coder17.com/posts/nextcloud-storage-full/ 2020-08-06T08:22:00.000Z 2020-08-06T08:22:00.000Z 在 Nextcloud 数据目录下 mount 其他位置的存储时,会误报存储已满。

    问题原因在于统计文件大小时会将外部存储和被共享文件全部计入,而统计总容量时不计算外部存储和 mount 的其他位置。

    修改/var/www/html/config/config.php,添加参数:

    1
    ‘quota_include_external_storage’ => true,

    并且在用户配置中,将配额改为“无限”以外的具体数值:

    image-20200806172234483

    设置后当前用户不再提示存储满,但如果此用户分享文件给其他用户,则被分享用户访问时仍会提醒文件 owner 的存储满。

    此外,即使 UI 上不提示,但 Nextcloud 内部的判定依然是存储满,因此 File Versioning 会因为空间不足而不工作,目前没有找到解决方法。因此不推荐层叠 mount 方式存储。

    ]]>
    <p>在 Nextcloud 数据目录下 mount 其他位置的存储时,会误报存储已满。</p> <p>问题原因在于统计文件大小时会将外部存储和被共享文件全部计入,而统计总容量时不计算外部存储和 mount 的其他位置。</p> <p>修改<code>/var/www/html/
    Nextcloud 自动扫描硬盘文件更新 https://www.coder17.com/posts/nextcloud-auto-scan/ 2020-08-06T06:18:00.000Z 2020-08-06T06:18:00.000Z Nextcloud 如果直接在数据目录进行读写文件,Web UI 上不会显示文件的实时更新。解决方案有三种。

    1. 手动扫描更新

    在命令行使用 php occ files:scan --all 手动扫描。在 docker 中执行需要用:

    1
    su -s /bin/bash -c "php /var/www/html/occ files:scan --all" -g users www-data

    其中 -g 后的参数依次为分组名和用户名。

    2. 修改 config.php 自动扫描

    修改/var/www/html/config/config.php,添加参数:

    1
    'filesystem_check_changes' => true,

    实现自动扫描

    3. 使用外部存储

    将需要直接读写的目录分离,并使用外部存储功能挂载。缺点是外部存储由插件实现,时常有 bug 出现。

    参考:

    https://help.nextcloud.com/t/folders-and-filesystem-check-changes/8203

    https://it.ismy.fun/2018/11/12/nextcloud-auto-files-scan/

    https://unix.stackexchange.com/questions/372850/how-to-run-command-as-different-user

    ]]>
    <p>Nextcloud 如果直接在数据目录进行读写文件,Web UI 上不会显示文件的实时更新。解决方案有三种。</p> <h2 id="1-手动扫描更新"><a href="#1-手动扫描更新" class="headerlink" title="1. 手动扫描更新"></a
    QNAP 普通用户环境变量不生效解决 https://www.coder17.com/posts/qnap-env-var/ 2020-08-02T14:55:00.000Z 2020-08-02T14:55:00.000Z 内置 admin 用户的 home 位于 /root ,而新建用户的 home 位于 /share/homes/USERNAME。此目录缺乏各种 rc 文件。导致安装 opkg 等第三方工具时无法自动设置 path。

    解决方案为使用普通用户登录 SSH 并定位到 home,然后把 root 目录里的各种配置文件软链接过来。

    1
    2
    3
    4
    ln -s /root/.bash_logout .bash_logout
    ln -s /root/.bash_profile .bash_profile
    ln -s /root/.bashrc .bashrc
    ln -s /root/.profile .profile

    修改后普通用户的 prompt 也会变成 # ,非常迷惑,原因是 PS1 变量在 .profile 中被修改,sudo vim .profile 编辑该文件,注释掉第一行的修改语句即可。

    1
    2
    3
    # export PS1='[\w] # '
    reset
    source /opt/etc/profile

    威联通的系统似乎没有考虑过建立普通用户日常使用的问题,默认思维模式都是使用内置 admin 账户完成,软件质量比较一般。

    ]]>
    <p>内置 admin 用户的 home 位于 <code>/root</code> ,而新建用户的 home 位于 <code>/share/homes/USERNAME</code>。此目录缺乏各种 rc 文件。导致安装 opkg 等第三方工具时无法自动设置 path。</p
    Docker volume 备份与恢复 https://www.coder17.com/posts/docker-volume-backup/ 2020-07-29T10:16:00.000Z 2020-07-29T10:16:00.000Z https://jiajially.gitbooks.io/dockerguide/content/chapter_fastlearn/docker_run/--volumes-from.html

    使用 –volumes-from 创建一个加载 dbdata 容器卷的容器,并从本地主机挂载当前到容器的 /backup 目录:

    1
    sudo docker run --volumes-from aaa -v $(pwd):/backup alpine tar zcvf /backup/aaa.tar.gz /<path>

    volumes-from 创建的容器其挂载的所有数据卷路径均与原容器相同,因此 <path> 改为原容器数据卷的挂载位置即可。

    容器启动后,使用了 tar 命令来将 dbdata 卷备份为本地的 /backup/backup.tar。 如果要恢复数据到一个容器,首先创建一个带有数据卷的目标容器。(或者先创建空数据卷)

    1
    sudo docker run -v volume_name:/volume_mount_path --name target alpine /bin/ash

    然后创建另一个容器,挂载 dbdata2 的容器,并使用 untar 解压备份文件到挂载的容器卷中。

    1
    sudo docker run --volumes-from target -v $(pwd):/backup alpine tar zxvf /backup/aaa.tar.gz -C /

    其中 -C / 表示解压路径从根目录开始,从而确保路径和备份时完全对应。

    ]]>
    <p><a href="https://jiajially.gitbooks.io/dockerguide/content/chapter_fastlearn/docker_run/--volumes-from.html">https://jiajially.gitbooks.i
    Grav 主题 Granty 5 Helium 部分修复与改造[弃坑] https://www.coder17.com/posts/grav-helium-mod/ 2020-05-17T10:43:00.000Z 2020-05-17T10:43:00.000Z 1. Header Owl Carousel 副标题 Tablet 宽度下错位溢出问题

    user\data\gantry5\themes\g5_helium\scss\custom.scss

    1
    2
    3
    4
    5
    6
    7
    // fix header subtitle overflow in tablet view
    // user\themes\g5_helium\scss\helium\particles\_owlcarousel.scss:378
    @media only all and (max-width: 59.99rem) and (min-width: 48rem){
    .g-owlcarousel .g-owlcarousel-item-wrapper .g-owlcarousel-item-content-container .g-owlcarousel-item-content-wrapper .g-owlcarousel-item-content {
    padding-top: 0
    }
    }

    2. Mobile 宽度下菜单栏和 logo 位置错位问题

    导航栏空白太大,将 Navigation 的部分设置 nomarginall 和 nopaddingall 后引起移动端错位,在此修正。

    image-20200517194323886

    user\data\gantry5\themes\g5_helium\scss\custom.scss

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // fix menu icon position on mobile view
    // user\themes\g5_helium\scss\helium\sections\_offcanvas.scss:45
    .g-offcanvas-toggle{
    top: 0.7rem
    }

    // gix logo position on mobile view
    // user\themes\g5_helium\scss\helium\particles\_logo.scss:25
    @media only all and (max-width: 47.99rem){
    .g-logo {
    margin: 0;
    }
    }

    3. 导航栏滚动固定

    使用 Fixed_Sticky Header Atoms for Gantry 5 (FREEBIES) 实现

    ]]>
    <h2 id="1-Header-Owl-Carousel-副标题-Tablet-宽度下错位溢出问题"><a href="#1-Header-Owl-Carousel-副标题-Tablet-宽度下错位溢出问题" class="headerlink" title="1. Heade
    华硕路由修改区域 https://www.coder17.com/posts/asus-region-mod/ 2020-05-12T02:13:00.000Z 2020-05-12T02:13:00.000Z 必须安装 Merlin 固件。

    控制国家码的部分在 CFE 不能修改,且 nvram 修改后重启系统/服务即失效。
    因此加到系统启动和服务启动的脚本即可。

    1
    2
    3
    4
    touch /jffs/scripts/init-start
    ln -s /jffs/scripts/init-start /jffs/scripts/service-event
    chmod a+rx /jffs/scripts/*
    vi /jffs/scripts/init-start
    1
    2
    3
    4
    5
    6
    7
    #!/bin/sh
    nvram unset territory_code
    nvram set location_code=JP
    nvram set 0:ccode=JP
    nvram set 1:ccode=JP
    nvram set wl0_country_code=JP
    nvram set wl1_country_code=JP

    并在 web 设置中 Administration -> System 启用用户脚本。
    其中 AA 为亚洲区,信号功率25,频段不全。需要其他频段时可设为 JP 或 TW。

    然后在 Web 界面中重启路由器。

    改好后语言菜单会解锁全部语言:

    image-20210421222345051

    User scripts · RMerl/asuswrt-merlin Wiki · GitHub

    ]]>
    <p>必须安装 Merlin 固件。</p> <p>控制国家码的部分在 CFE 不能修改,且 nvram 修改后重启系统/服务即失效。<br>因此加到系统启动和服务启动的脚本即可。</p> <figure class="highlight bash"><table><tr><td
    废物利用为 Galaxy S6 SM-G9200 刷入可用系统 https://www.coder17.com/posts/galaxy-s6-system/ 2020-04-24T15:00:00.000Z 2020-04-24T15:00:00.000Z Galaxy S6 发布于2015年,中国大陆公开版是双卡单4G,初始系统版本 5.0。我将其作为备用机多年来一直使用当年自行修改的旧版 6.0 系统,时过境迁现在已兼容性较差。三星已经发布了7.0版本的系统更新,因此试图更新到最新版本的 offical 系统。但中国版系统阉割严重,且有大量中国毒瘤App,无法直接使用。

    尝试 Odin 刷入港版系统,不管是四件套还是一体包,单刷还是全部,均会验证失败。查阅得知该型号虽然港版和中国(内地,下略)版均标示型号为SM-G9200,但港版机型代号为zerofltezh,中国版为zerofltezc,基带不同,港版不支持中国电信网络,因此无法混刷。

    故底包只能采用中国版官方固件。在此基础上刷入 GApps 使手机可用。

    1. 刷入完整系统

    使用 SamFirm 下载最新版CHC区域固件四件套:

    image-20200425054145843

    使用最新版 Odin 刷入手机,重启,确认正常动作。

    2. 刷入 CF-Auto-Root

    其网站主页 输入型号G9200后,选择 zerofltezc 版本:

    image-20200425054507054

    点击最新固件,在其下载页面单击 Configure:

    image-20200425054555517

    在配置选项中,Installation type 选择 Systemless ImageAdvanced Encryption Optionsdm-verify 选择 Remove ,其他保持默认,点击 Generate 生成刷机镜像,可能需要排队,且下载速度较慢。

    下载后使用 Odin 在 AP 中刷入手机,重启,确认正常动作。

    3. 刷入 Magisk

    SuperSU 作者已经弃坑不再更新,当前使用 Magisk 管理SU权限。但我们目前没有安装 custom recovery,故不使用 zip 包直接安装,而采用 patch 系统镜像并用 Odin 刷入的方式安装。

    1. 在 GitHub Release 页面获取最新的 Magisk Manager 并安装。
    2. 使用 7-zip 打开 rom 四件套中的 AP 文件,解压其中 boot.img 并复制到手机中。
    3. 运行 Magisk Manager ,点击安装 Magisk,选择 Patch 镜像,并继续在文件浏览中选择刚才提取的 boot.img。(注:根据官方文档,可以选择 Patch boot 或者 recovery,但测试 recovery 不成功,故此处采用 boot)
    4. 将 patch 过后的 IMG 文件复制回电脑,更名为 boot.img,并使用 7-zip 等压缩软件打包为 tar 格式。
    5. 在 Odin 的 AP 中选中刚才打包的 tar 包,刷入手机。
    6. 重启,进入 Magisk Manager ,选择同意下载安装,再次重启后确认正常动作。

    4. 刷入修改版 TWRP recovery

    TWRP 没有正式提供 G9200 版本的支持。多年前 Xiao1u 曾提供过修改过的兼容版本 G9200-PC1-TWRP-3.0-PC1-0324.tar ,搜索即可获得,此版本对 7.0 系统的兼容不完美,有可能会导致 bootloop。参考 J Tech board 的解决方案,在确认 dm-verify 已关闭后,使用 Odin 刷入该文件。刷入时取消 Odin 中 Auto Reboot 的勾选。刷完后使用 Vol+ Home Pow 三键进入 recovery,什么都不做直接选择重启到系统,询问是否阻止系统还原 Recovery 时选择忽略。确认依然能正常进入系统。

    5. 删除自带的中国 App 和字体等

    如果不删除,后面刷入 GApps 可能导致系统空间不足。即使删除后仍要使用,可以事后重新安装到用户空间。

    安装 System App Remover 查看想要移除的内置应用,长按可以获得该应用的路径。使用 Solid Explorer 定位并删除文件。

    6. 刷入 Gapps

    OpenGapps 的主页获得 zip 刷机包,传输至手机,重启至 TWRP 后选择刷入。注意此处如果直接刷入 7.0 系统对应的 nano 或者 pico 包,会导致系统 WebView 被删除,从而导致 Google 账户无法登录等问题,无法使用。

    解决方案有两个思路,一是安装新的 Chrome WebView 替代被删除的原生 WebView,二是避免原生 WebView 被删除。经测试,即使安装Chrome 也仍然不能恢复该组件正常使用,可能三星对允许使用的 WebView 做了限制,或有其他兼容性问题。避免 WebView 被删除则可以通过添加配置文件 ,或者添加 package-overlay 重新编译 等方法。这里使用相对比较简单的修改安装脚本方式完成。

    下载 pico 版本 OpenGApps zip 包后,解压提取 install.sh 文件,搜索:

    1
    # List of GApps files that should NOT be automatically removed as they are also included in (many) ROMs removal_bypass_list

    并在其后的空引号内加入 WebViewGoogle,保存退出,将修改后的文件压入 zip 包,重启手机进入 TWRP 刷入即可。

    刷好后清空缓存,进入系统开发者模式,查看 “实装的 WebView” 选项不为空,即可。推荐重启手机,双清后从向导开始重新初始化系统,避免谷歌系列服务出现授权问题。

    7. 总结

    避免购买在中国大陆境内售卖的任何具有中国定制 Rom 的电子产品(包括无线耳机等具有中国区定制 Firmware 的产品),并 7x24 连接全球互联网,和全球大多数国家和地区的用户保持类似的软件使用习惯,可以避免绝大多数的烦恼。

    ]]>
    <p>Galaxy S6 发布于2015年,中国大陆公开版是双卡单4G,初始系统版本 5.0。我将其作为备用机多年来一直使用当年自行修改的旧版 6.0 系统,时过境迁现在已兼容性较差。三星已经发布了7.0版本的系统更新,因此试图更新到最新版本的 offical 系统。但中国版系统
    VHDX 空间释放 https://www.coder17.com/posts/vhdx-release/ 2020-04-09T03:21:00.000Z 2020-04-09T03:21:00.000Z 动态磁盘不会自动释放,因此如果有需要可以手动释放。似乎 exFat 分区效果不佳。

    如果虚拟磁盘已经挂载,需要先卸载。然后运行 diskpart,执行:

    1
    2
    3
    4
    select vdisk file="<Path to VHDX>"
    attach vdisk readonly
    compact vdisk
    detach vdisk

    参考:

    https://blog.littlelanmoe.com/杂谈/364

    ]]>
    <p>动态磁盘不会自动释放,因此如果有需要可以手动释放。似乎 exFat 分区效果不佳。</p> <p>如果虚拟磁盘已经挂载,需要先卸载。然后运行 <code>diskpart</code>,执行:</p> <figure class="highlight plaintext">
    Linux MAC 地址伪装 https://www.coder17.com/posts/linux-mac-faking/ 2020-04-06T09:01:00.000Z 2020-04-06T09:01:00.000Z https://wiki.archlinux.jp/index.php/MAC_アドレス偽装#.E6.96.B9.E6.B3.95_1:_systemd-networkd

    Tested on Ubuntu 18.04 LTS

    创建系统服务,每次开机时使用 ip link set 修改 mac 地址。

    1
    sudo vim /etc/systemd/system/[email protected]
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [Unit]
    Description=MAC Address Change %I
    Wants=network-pre.target
    Before=network-pre.target
    BindsTo=sys-subsystem-net-devices-%i.device
    After=sys-subsystem-net-devices-%i.device

    [Service]
    Type=oneshot
    ExecStart=/sbin/ip link set dev %i address 90:2b:34:d2:15:25
    ExecStart=/sbin/ip link set dev %i up

    [Install]
    WantedBy=multi-user.target
    1
    sudo systemctl enable [email protected]

    已知问题:有时涉及网络的重启(推测如 docker)会导致失效。此时需要重启服务。

    1
    sudo service macspoof@eno2 restart
    ]]>
    <p><a href="https://wiki.archlinux.jp/index.php/MAC_%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E5%81%BD%E8%A3%85#.E6.96.B9.E6.B3.95_1:_systemd-net
    QNAP 硬盘不休眠解决 https://www.coder17.com/posts/qnap-hdd-wont-sleep/ 2020-03-18T23:33:00.000Z 2020-03-18T23:33:00.000Z 0. 系统 raid 结构

    使用 cat /proc/mdstat 可以查看所有 raid 卷。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath]
    md3 : active raid1 sdc3[0]
    3897063616 blocks super 1.0 [1/1] [U]

    md2 : active raid1 sda3[0]
    7804071616 blocks super 1.0 [1/1] [U]

    md1 : active raid1 sdb3[0]
    392120832 blocks super 1.0 [1/1] [U]

    md322 : active raid1 sda5[1] sdc5[0]
    7235136 blocks super 1.0 [2/2] [UU]
    bitmap: 0/1 pages [0KB], 65536KB chunk

    md256 : active raid1 sda2[1] sdc2[0]
    530112 blocks super 1.0 [2/2] [UU]
    bitmap: 0/1 pages [0KB], 65536KB chunk

    md321 : active raid1 sdb5[0]
    8283712 blocks super 1.0 [2/1] [U_]
    bitmap: 0/1 pages [0KB], 65536KB chunk

    md13 : active raid1 sda4[0] sdc4[33] sdb4[32]
    458880 blocks super 1.0 [32/3] [UUU_____________________________]
    bitmap: 1/1 pages [4KB], 65536KB chunk

    md9 : active raid1 sda1[0] sdc1[33] sdb1[32]
    530048 blocks super 1.0 [32/3] [UUU_____________________________]
    bitmap: 1/1 pages [4KB], 65536KB chunk

    unused devices: <none>

    注意到 md9 md13 md322 md256 均是横跨了机械硬盘的 raid 卷。搜索后得知 md9 和 md13 是系统自动创建的跨所有硬盘的 raid1 数据卷,存储系统配置和目录等。md322 和 md256 是系统 swap 分区。

    1. 系统分区 raid 反复读取

    使用 blkdevMonitor.sh 脚本查看硬盘读写,可以看到大量 md9 相关读取。因此首先处理 md9 和 md13。

    使用 parted /dev/sdb print 命令查看各硬盘,通过容量判断 sdb 是 SSD,sda 和 sdc 是两块机械硬盘。因此将 SSD 以外的硬盘从阵列中踢出。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash

    echo "Disconnecting md9"
    mdadm /dev/md9 --fail /dev/sda1
    mdadm /dev/md9 --fail /dev/sdc1

    echo "Disconnecting md13"
    mdadm /dev/md13 --fail /dev/sda4
    mdadm /dev/md13 --fail /dev/sdc4

    使用 mdadm -D /dev/md9 验证移除是否成功

    然后使用 hdparm -y /dev/sda 立即休眠硬盘,并使用 hdparm -C /dev/sda查看硬盘状态,active/idle 或者 standby

    但断开连接时万一系统盘损坏,则系统数据会丢失,因此每天同步一次。使用下列脚本恢复连接。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash

    echo "Re-adding md9"
    mdadm /dev/md9 --re-add /dev/sda1
    mdadm /dev/md9 --re-add /dev/sdc1

    echo "Re-adding md13"
    mdadm /dev/md13 --re-add /dev/sda4
    mdadm /dev/md13 --re-add /dev/sdc4

    保存上述两个脚本后(记得添加 x 权限),使用 crontab 每天运行一次,加回去15分钟后断开连接,应足够其完成同步。

    1
    2
    3
    sudo echo 15 0 \* \* \* /share/homes/Tojo/rebuild_internal_raid.sh >> /etc/config/crontab
    sudo echo 30 0 \* \* \* /share/homes/Tojo/disconnect_internal_raid.sh >> /etc/config/crontab
    sudo crontab /etc/config/crontab && sudo /etc/init.d/crond.sh restart

    并修改启动脚本使其自动生效。

    2. swap 分区

    使用 cat /proc/swaps 查看系统 swap 分区,发现很诡异地两个 swap 都建立在机械硬盘上。

    但目前看起来不是很影响休眠,就先不管他了。

    参考:

    Advanced guide to how I completely silenced my TS-453A - QNAP NAS Community Forum

    md clarification please_ - QNAP NAS Community Forum

    Find out which process prevents the hard drives from spindown - QNAPedia

    ]]>
    <h2 id="0-系统-raid-结构"><a href="#0-系统-raid-结构" class="headerlink" title="0. 系统 raid 结构"></a>0. 系统 raid 结构</h2><p>使用 <code>cat /proc/mdstat</c
    QNAP 添加定时任务 https://www.coder17.com/posts/qnap-crontab/ 2020-03-18T23:31:00.000Z 2020-03-18T23:31:00.000Z
    1
    2
    3
    sudo vi /etc/config/crontab
    sudo crontab -l
    crontab /etc/config/crontab && /etc/init.d/crond.sh restart

    记得把要运行的命令属性 +x

    参考:

    Add items to crontab

    ]]>
    <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class=