星期二, 8月 28, 2018

Let's Encrypt shortcut

以前談過了如何將網站對外服務由 http 升級成 https,但畢竟憑證還是有成本。最近再研究 Let's Encrypt 發現,雖然免費僅有三個月效期,但藉由 Certbot 的幫忙,申請 https 憑證非常容易,要準備的是:
  • 公開域名
  • 主機在網際網路上
  • 防火牆允許連入 80 埠
  • Linux OS(在 CentOS 7 試過)
  • Certbot(可能要先裝 EPEL)
如果再加上 ngrok 預演一下,甚至連前兩項都省了,做法是:
  • 在內網虛擬機上,CentOS 7 先裝好 ngrok、Certbot
  • 指令 ./ngrok http 80,取得一個臨時公開域名 xxx.ngrok.io
  • Ctrl+Fn 切到另一個終端機
  • 指令 sudo certbot certonly --standalone -d xxx.ngrok.io
這次發現 Ngrok 還是比 Serveo 略勝一籌,後者是拿不到憑證的。
三個月是限制嗎?Certbot 也支援 renew,放在排程裡,比那些一兩年效期的憑證強多了。

[2018/08/29]
這篇的做法也值得參考,只要看 Step 1,不用安裝 Certbot,透過 Docker 開一個臨時的 Certbot,取完憑證就收了,拿到的檔案哪一個是什麼用途則可參考這篇。可惜的是在 -v /var/lib/letsencrypt 打錯字,應該是 /var/log/letsencrypt 才對。
另外,若是在 CentOS 7 SELinux 環境下,掛載的 Volume 後面要加 :Z 才能寫入哦!

星期六, 8月 25, 2018

Serveo, Ngrok alternative

Ngrok 非常好用,不過就是免費僅限一個,也要安裝稍嫌麻煩。若是臨時在 Linux 上要用此功能,倒是可考慮免安裝的 Serveo,只需打一行指令:
  • ssh -R 80:localhost:3000 serveo.net
如果順利,就能把本機的 3000 曝露到網際網路上,外界可訪問的主機名稱會出現在這指令的回應中。一種更厲害的用法:
  • ssh -R abc:80:localhost:3000 serveo.net
理想中可固定外界可訪問的主機名稱為 abc.serveo.net,如果沒跟別人撞名的話。

[2019/01/07]
想保持較長期的連線,需增加一個參數:
  • ssh -o ServerAliveInterval=60 -R abc:80:localhost:3000 serveo.net

星期三, 8月 22, 2018

LDAP for testing environment

想在測試環境管理另一套帳號,雖然 OpenLDAP 安裝不算太複雜,不過要寫小程式或準備 ldif 建帳號都有點麻煩,可以考慮 LDAP Admin。不像以前常用的 jxplorer 需要 Java,它可以直接裝在 Windows 上(不能跨平台就是了),可以直接視覺化看到目錄結構(這不希奇),可以直接增刪修查物件(厲害了吧),而且像新增使用者這麼多必填屬性的情況,只要 Second name 填好,其他有些欄位會連動,再補個 Home Directory 輸入正斜線就夠了。
為了資安與權限,還要讓使用者有機會修改預設密碼,雖然 ldappasswd 很簡單,但不是每個使用者都有 Linux 環境,也都願意下指令。替代方案是這個 Docker Image,一個最單純的啟動範例:
  • docker run -d -p 80:80 --name lssp
  • -e LDAP_HOST=172.16.1.2
  • -e LDAP_PORT=389
  • -e LDAP_BASE=dc=acme,dc=com
  • -e LDAP_USER=cn=Manager,dc=acme,dc=com
  • -e LDAP_PASS=xxxx
  • dtwardow/ldap-self-service-password
如此一來,使用者就有個容易使用的介面可以修改密碼了。特別要注意的是 LDAP_HOST,因為是從 docker container 往外看,真正的 DNS 不一定幫得上忙,用位址還是比較保險。
奉送一首小插曲:明明在 ubuntu 試過可以了,搬到 CentOS7 結果出個莫名其妙的狀況,「AH00534: apache2: Configuration error: No MPM loaded.」,似乎是檔案系統的問題。雖然看不太懂,不過以下解法有用(出處有些錯字,校正後如下):
  • docker stop lssp
  • systemctl stop docker
  • dd if=/dev/zero of=docker_fs bs=1G count=2(開 2G 的空間,不夠的話加大 count)
  • mkfs -t xfs -n ftype=1 docker_fs
  • mount -o loop docker_fs /var/lib/docker
  • 在 /etc/fstab 新增一行 /path/to/docker_fs /var/lib/docker xfs rw,loop,auto 0 0
  • systemctl start docker
  • docker start lssp

星期一, 8月 20, 2018

Change port expose after run

已 run 起來的 docker container 若要增加曝露對外的網路埠,除了 stop / commit / start 之外,也有更漂亮的方式:
  • docker stop ...
  • systemctl stop docker
  • vi /var/lib/docker/containers/.../hostconfig.json
  • systemctl start docker
  • docker start ...

星期六, 8月 18, 2018

Android SD card upgrade

當舊的記憶卡空間不足,買了更大容量的新卡,升級時需注意:
  • Android 關機、取出記憶卡。在這件事情做完之前,都不會用到手機。
  • 「搬檔案」可能造成 Android 讀不到卡,不論新舊,千萬別這麼做。
  • 「複製磁碟分區」Clone Partition 可行,用過這篇文章推薦的 Partition Wizard。
  • 新、舊卡可用時接上電腦會比較方便,但只有一條線/讀卡機可接電腦?將舊卡備份在電腦,再還原到新卡。只是電腦要準備一塊「超過備份容量」的未使用空間,如果所有空間都已分配到 Partition,就要重新分割;如果舊卡不是塞得很滿,也可以「縮減」磁碟分區再備份。
  • 複製的 Partition 跟舊卡一樣大小,浪費了新卡的空間?也是一樣用上面提到的軟體「擴展」磁碟分區。

星期日, 8月 05, 2018

offline install yum package - MariaDB

以安裝 MariaDB 為例,由於 CentOS YUM repository 並沒有最新版,要自己上 Maria 官網看這個說明下載,常做也是有點麻煩。這次希望準備一個「離線版」安裝包,既不用等網路,又可減少安裝程序。首先參考這篇的前置動作,下載與目錄準備:
  • sudo yum install yum-plugin-downloadonly yum-utils createrepo
  • mkdir /var/tmp/maria
  • mkdir /var/tmp/maria-installroot
再來是準備 /etc/yum.repos.d/mariadb.repo,內容如下:
  • [mariadb]
  • name = MariaDB
  • baseurl = http://yum.mariadb.org/10.3/centos7-amd64
  • gpgkey = https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
  • gpgcheck = 1
接著把 yum maria 下載安裝分開,下載是:
  • sudo yum install --downloadonly --installroot=/var/tmp/maria-installroot --releasever=7 --downloaddir=/var/tmp/maria MariaDB-server MariaDB-client
  • sudo curl https://yum.mariadb.org/RPM-GPG-KEY-MariaDB -o /etc/pki/rpm-gpg/RPM-GPG-KEY-MariaDB
包裹成離線安裝資源:
  • createrepo --database /var/tmp/maria
  • sudo rm -rf /var/tmp/maria-installroot
再準備「離線版」/etc/yum.repos.d/mariadb-offline.repo:
  • [mariadb-offline]
  • name = MariaDB-offline
  • baseurl = file:///var/tmp/maria
  • enabled = 0
  • checkgpg = 1
  • gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-MariaDB
可以多檢查一下完整性:
  • repoclosure --repoid=mariadb-offline
如果沒問題的話,把 /var/tmp/maria 目錄壓成一個檔案:
  • tar -cvf mariadb-offline.tar /var/tmp/maria
未來就解壓 mariadb-offline.tar,以及 /etc/yum.repos.d/mariadb-offline.repo /etc/pki/rpm-gpg/RPM-GPG-KEY-MariaDB 搬到要安裝 MariaDB 的 CentOS 7 主機上,即使對外無網路,也可以順利安裝 MariaDB:
  • tar -xvf mariadb-offline.tar -C /
  • sudo yum --disablerepo=\* --enablerepo=mariadb-offline install MariaDB-server MariaDB-client
安裝後再人工啟動:
  • systemctl start mariadb
[2018/08/09]
java-1.8.0-openjdk 類似的過程:雖然官方 yum 有收此套件,省了多一組 GPG-KEY 的問題,但可能另外遇到目標主機沒有經過 yum update,以致 nss 比 openjdk 所需版本要舊。解決之道二選一:
  • 出貨端要求各被安裝系統需求為「近日曾做過 yum update」,而且每次出貨前都先 yum update 再包離線安裝檔。(顯然是個爛方法)
  • 離線安裝包增加 nss nss-tools(如果有需要的話,可能也要納入更多版本不符的套件),並且在安裝時額外指定一併安裝 nss 套件。

星期三, 8月 01, 2018

NextCloud WebDAV Client's API username

依據這篇,NextCloud 似乎很容易透過 API 存取,但試過自已裝的沒問題,公司的不行。原來在這個簡單的呼叫範例:
  • curl -X PROPFIND -u username:password https://nextcloud.acme.com/remote.php/dav/files/username
其中第一個 username 與第二個不同:第一個是帳號,但第二個 username 要如下圖取得 @ 前面那段 UUID

接著想必可問,為何自已裝的沒這麼複雜?應該是受了什麼外掛的影響,同步進 NextCloud 的帳號多隔了一層,不再直接用帳號名稱,以保持唯一性。