解決 Openwrt 隨機重啟/死機 問題

在裝完 Openwrt 之後, 隨機重啟的問題就一直如影隨形. 經常在 大半夜/看 Youtube 看到一半 這種尷尬的場合聽到它 滴滴滴滴滴 重啟的聲音. 嘗試過很多種辦法, 無果.

每次重啟都會導致運行在 Openwrt 下的一堆設備停擺 5 – 10 分鐘. 期間 Wifi 無法使用, 博客也無法訪問. 幸而 Openwrt 可以自動重啟, 因此問題不算太大.

JetPack 毫不留情的轟炸我的郵箱
閱讀全文 解決 Openwrt 隨機重啟/死機 問題

使用 Restic 加密增量备份到网盘

转载声明:
本文很大程度上参考了 KnightHart 发布的贴文 restic-全平台nas的加密增量快照备份神器.
但是在原文基础上有增添和修改, 若有侵权, 请联系 [email protected] 删除文章.

前言

搭建家庭 NAS 的前前后后我曾经格盘格过两次, 尽管每次都抢救回来了, 但是自那以后我一直在盘算着备份的主意. 和 KnightHart 的历程大致相同, 我尝试过:

  • 简单的 git 备份 (本地 .git 文件夹不断增大而且大文件有限制)
  • syncthing (是个好东西但是只支持在自己的设备间同步, 占磁盘) 
  • 百度网盘 (不安全、下载限速)
  • rclone + 白嫖的 Google Teamdrive (无法加密, 不支持增量)

解释一下 Google Teamdrive 为什么要加密吼. 前阵子网上出现了很多 Cloudflare Workers 脚本允许 User 给自己分配一个空间无限的, 挂在某大学名下的团队盘, 可以随便往里面扔、取文件, 而且一般 Google Personal Drive 的功能它都有哦. 但是唯一的问题是, 提供脚本的人是可以看到你网盘里的文件, 而且是可以任意上传下载的; 那这不就隐私性全没了吗? 所以如果要备份, 一定要加密的. 另外, Google Teamdrive 有传输速率限制, 所以备份如果不是增量的, 也会很麻烦.

閱讀全文 使用 Restic 加密增量备份到网盘

CentOS/Debian 安裝 BOINC 受控端簡明教程

因為最近一直在折騰 VPS, 然後一直都覺得 VPS 閒置時就是在浪費錢. 當然我也嘗試過用 CPU 挖礦, 不過當看到礦池顯示 “距離收益還有 2147483646 年” 的時候, 我徹底怒了: 我 TM 還不如去做公益!

於是我就安裝了 BOINC…

轉載聲明:
本文轉載自「闪星空间」, 遵循 署名-非商业性使用 3.0 (CC BY-NC 3.0) 协议.
本文在原文基礎上有輕微修改, 主要是新增了 CentOS 的部分.

BOINC 全称 Berkeley Open Infrastructure for Network Computing,即伯克利开放式网络计算平台,是由美国加州大学伯克利分校电脑学系发展出的分布式计算平台,目前已成为世界上主流分布式计算平台之一。希望用户利用空余的算力,帮助进行包括数学、医学、物理和气象学等学科的学术研究。

閱讀全文 CentOS/Debian 安裝 BOINC 受控端簡明教程

Man Page: 如何使用以及小貼士

這是什麼

Man Page ( Manual Page ) 是 Unix 系統標配的在線系統手冊, 主要用來查詢命令. 在使用包管理器安裝程序的時候基本總是可以看到 configurating man-db... 的輸出, 是程序將自己的手冊加入到系統手冊當中.

儘管 Man Page 聲稱是在線手冊 ( 其本身也支持在線查詢 ), 但是大多數手冊都以 troff 格式存儲在本地.

包含的章節

章節描述
1命令
2System calls (Linux 內核函數)
3庫函數. (收錄了部分 C 語言函數)
4特殊檔案 (比方說 /dev 下的文件) 和驅動
5檔案格式與協定 (e.g /etc/passwd )
6遊戲和屏保
7雜項
8管理員指令

在手冊的開頭和結尾都可以看到 名稱(數字) 形式的字串, 括弧中的數字就是說明這個條目隸屬的章節. 一個條目可以隸屬于多個章節, 比如 passwd 是一個命令的同時也是一個檔案, 所以它同時隸屬于第一和第五章.

閱讀全文 Man Page: 如何使用以及小貼士

Linux 將運行中的任務轉後台並在會話關閉後繼續運行

假如我想要在服務器上把文件從一個硬盤考到另一個硬盤, 就要用到 cp/dd/rsync 命令對吧, 我想要讓服務器去運行這個命令, 我可以直接把終端關掉, 這時候第一個想起來就是 nohup [命令] &. nohup 意思是讓終端掛掉時進程不結束, & 的意思讓進程在後台執行.

但是如果我在拷貝之前沒想這麼多, 開始了之後才發現要運行好久, 這個時候應當怎麼辦呢? 我在中文互聯網上並沒有找到相關的問題/答案. 反倒是在 Stack Overflow 上找到了.

原問題及回答:

https://stackoverflow.com/questions/625409/how-do-i-put-an-already-running-process-under-nohup

  1. 按 Ctrl + Z 暫停程序
  2. 輸入 bg 讓暫停的程序在後台執行
  3. 輸入 jobs 查看程序 id (如果之前沒有執行類似操作過就是 1)
  4. 輸入 disown -h [id] 從 shell 的作業列表移除指令

Thumbnail: Sea Shell by Shyam B
If using the image violates your rights, or there’s anything related to copyright laws, please contact me at [email protected], I will deal with them immediately.

Samsung Tab S5e 安裝 Magisk + Root + TWRP

機型Samsung Galaxy Tab S5e LTE (gts4lv)
代號SM-T725C
CSCChina Open China (CHC)
Android10 -> 11 ( Q -> R )
Sammobile Download
ADBOffical Download
USB DriverSamsung Official
OdinOdin 3.13.1
TWRPsamsung/samsunggalaxytabs5elte.html
TWRP App Apkfile
Magisk#samsung-system-as-root
topjohnwu/Magisk
FrijaSlackingVeteran/frija
所有本次刷機要用到的信息和鏈接都在上方.

備註:

  • Wifi 版本的 Tab S5e 也可以參考我的過程, 只是 TWRP 換為
  • 沒有梯子的話下載固件那一步會非常慢, 請自行準備
  • Samfirm 在 2021年已經失效, 所以轉用 Frija
  • 本文選擇的升級方式是清除數據重刷, 如果以前安裝過 Magisk 不想清除數據的可以跳過清除數據那一步
閱讀全文 Samsung Tab S5e 安裝 Magisk + Root + TWRP

WordPress Docker 優化: 添加 PhpRedis、Memcached 支持

環境:
Docker + WordPress, 用官方默認的 Apache 驅動, 不是 fpm.

因為 PhpRedis 不屬於 PHP 內置的模塊, 而 PHP 內置了一個 Predis 又太慢太蛋疼, 所以要重新構建 Docker Image 為 PHP 添加 Redis 模塊支持.

為了添加這個 Redis 模塊, 我特別做了一些搜索, 發現網上清一色的全部是 本教程只適合 fpm 版本云云. 我個人認為這是一種迷思啊, 因為不論是用 php-fpm 還是 apache + php-mod 應該都和 php 的插件沒有太多關係吧. 所以雖然上面環境說的是 wordpress-apache , 用 wordpress-fpm 的朋友照著這個教程做也沒差.

構建 Docker Image

mkdir /tmp/build
cd /tmp/build
# 添加 Memcached 支持
cat > /tmp/build/Dockerfile << EOF
FROM wordpress:latest
RUN apt-get update
RUN apt-get install -y libz-dev libmemcached-dev && \
    pecl install memcached && \ 
    docker-php-ext-enable memcached && \
RUN rm -rf /tmp/pear && \
    apt-get clean
EOF
# 添加 Redis 支持
cat > /tmp/build/Dockerfile << EOF
FROM wordpress:latest
RUN pecl install -o -f redis && \
    docker-php-ext-enable redis
RUN rm -rf /tmp/pear
EOF

關於 Memcached vs Redis… 這個網上都可以搜到吧. 我的意見是, 兩者都能給一個 WordPress 小博客提供相當不錯的 Object Cache. 效能的話, Redis 略勝一籌, 但是要求專門開一個 Redis 容器. 而 Memcached 安裝好之後直接用就可以了. 所以還是根據服務器的配置來選吧.

docker build -t wordpress_extended .
閱讀全文 WordPress Docker 優化: 添加 PhpRedis、Memcached 支持

例行安全檢測 — 加固WordPress

因為我正在使用 cloudflare 提供的內網穿透服務, 相當於整個服務器只對外開放了 Web 服務, 所以我基本是圍繞 Web 服務在加固. 如果讀者的 wordpress 跑在租用的 VPS 上, 極有可能同時開放了數據庫、SSH、FTP 服務, 對這些的防護不在本文討論範圍內.

本文主要是參考了這篇官方教程. 如果你英文好的話, 不妨自己讀一讀這篇教程, 寫的很詳細, 基本每一個改動都有解釋.

檢測手段

https://github.com/wpscanteam/wpscan

下載 wpscan, 然後在終端敲入

wpscan --url https://example.com

可能需要關閉 CF 防火牆.

刪除無關文件

cd /www/wordpress

# 刪除根目錄下無關文件
rm readme.html
rm license.txt

# 遞歸刪除插件、主題 Readme
find . -name readme.txt -type f -print -exec rm -rf {} \;
閱讀全文 例行安全檢測 — 加固WordPress

WebRTC IP 洩露漏洞

記得惡維事件嗎? 六扇門跨省追捕中學生然後把他們扔進監獄言行拷打一直電到陰毛燒焦為止.
據說有一些完全無辜的網友被攪進這件事情, 就是因為他們曾經瀏覽過或者編輯過惡維, 警方在惡維的數據庫裡查到了他們的 IP.

能上惡維一定是掛了 VPN 的啊? 啊對, WebRTC Leak 就是 Leak 了 VPN 背後的 IP, WebRTC Leak 的原理和 PoC 可以在這裡找到.

這是因為惡維“很走心”的在站點上掛了一個 JS, 利用了 WebRTC 漏洞從而繞過代理紀錄了瀏覽者的真實 IP.

惡俗掛掉了 (舊的), 但是誰都不能說什麼時候某個網站也會掛掉, 帶一大批網友下水 (品蔥, 比方說) . 畢竟正常人誰會注意網站加載了那個 JS, 有沒有用 WebRTC. 說不定 JS 還是加密的, 根本防不勝防.

你可以在 這個網站 檢測自己有沒有中招.

解決方案

手機端如果是使用 Chrome , 除了掛 V2 之類的代理其他根本就無解, Firefox 還可以自己更改設置, Chrome 已經不允許了

PC端的話可以使用插件, 可以改設置 ( 我推薦使用插件的啦 ), 比如 Firefox 就有這款插件.

當然, 電腦手機都可以使用 Tor 瀏覽器來規避這種風險; 我的建議是, 就不要使用手機瞎幾把瀏覽境外反動勢力集團網站.

如果手頭暫時沒有 Tor, 只是想要簡單的瀏覽網頁 ( 沒有登錄等需求 ), 可以使用網頁代理來訪問網站. 你也可以使用我手頭的這個 JSProxy 反向代理, 親測可以防止 WebRTC leak. ( 因為原作者太長時間沒有更新, 這個 JSProxy 好像不能 Pass Cloudflare CDN 保護, 訪問品蔥等網站會一直卡在 JS 詢問頁面上. 所以如果有 Tor 還是用 Tor 吧.

Docker 無縫切換鏡像

警告: 我只是一個正在學習 Docker 的中學生,
一切在生產環境嘗試本文所述技巧所導致的損失都是自作自受.

有的時候, Docker 鏡像更新了, 但是容器並沒有更新, 你想要用更新過後的鏡像來部署容器; 奈何你並沒有像 Portainer 這樣的 GUI 介面, 你早就不記得當初部署容器時執行的指令了, 碰到這種情況應該怎麼辦?

下文便以更新 Portainer 為例來演示簡單的無縫切換鏡像.

Pull 来的镜像

第一步當然是要先拉取更新的鏡像.

docker pull portainer/portainer-ce:latest

接著, 使用 rekcod 這個工具來獲取部署容器時輸入的命令.

$ docker run --rm -i -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod <container>

# 樹莓派玩家
# docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod:3.0.0arm

# 為該命令設別名
# alias rekcod="docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod:3.0.0arm"

短暫刪除舊的容器, 然後部署上新的.

$ docker stop <container>
$ docker rm <container>
$ <執行 rekcod 得到的結果>

至此, 新的容器就部署好了, 而當機時間不會超過幾秒鐘👌

最後別忘了刪除掉舊的鏡像喔.

自 Build 的鏡像

假設當初用來 Build 鏡像的 Dockerfile 已經遺失, 可以用 dfimage 這個神器來從鏡像中提取 Dockerfile 用於構建.

$ docker run -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage  <image>

# 為該命令設別名
# alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage "

恢復出來後就可以愉快的繼續玩耍啦~ 但是要注意, 很多時候不是恢復出來就可以用的, 因為涉及到 Reverse Engineering, 恢復出來的文件基本是和原來的 Dockerfile 不一樣的. 因此還是建議好好保存 Dockerfile.