在 Reduce Docker image sizes using Alpine 這篇學到的,add 時加上 –virtual,是暫時性的為這次加的 package 納入群組。之後若不需要這些 package,就可以在 del 時,指定這個名稱,就可以移除前次加入的 packages。
apk add --no-cache --virtual .build-deps gcc freetype-dev musl-dev apk del .build-deps
Just thinking more…
在 Reduce Docker image sizes using Alpine 這篇學到的,add 時加上 –virtual,是暫時性的為這次加的 package 納入群組。之後若不需要這些 package,就可以在 del 時,指定這個名稱,就可以移除前次加入的 packages。
apk add --no-cache --virtual .build-deps gcc freetype-dev musl-dev apk del .build-deps
前幾天看到的 NTP 軟體 – Chrony:
安裝很簡單,Ubuntu 14.04 以後的版本都包進去了:sudo apt-get install chrony
設定檔在 /etc/chrony/chrony.conf ,基本上不用去更動。主要的設定是 pool 或 server 開頭的那幾行,主要是描述要跟哪台 NTP 伺服器同步,Ubuntu 16.04 預設是寫pool 2.debian.pool.ntp.org offline iburst 。
在 AWS 環境裡,可以把該行改成 server 169.254.169.123 prefer iburst ,直接跟 AWS 的 NTP 伺服器同步。要跟 Ubuntu NTP 伺服器同步,可以改成 pool ntp.ubuntu.com offline iburst
使用方法也很簡單:
所以現在就不用 ntp/ntpdate 了。
看到這篇文章:How to select the fastest apt mirror on Ubuntu Linux ,sources.list 裡可以改用 mirror://mirrors.ubuntu.com/mirrors.txt 這樣的 URL,apt 就會自動使用 mirror ,不過 apt 不一定會選到最快的 mirror。
在選最快的 mirror 時,可以用 netselect ,但 debian 才有包 netselect 。文章的留言有人提到一個組合命令可以用來取代 netselect ,我試了之後,發現不能用,稍稍做了調整 (改 sed 以及改用 awk 取 ping 結果):
for mirror in $(wget -qO - mirrors.ubuntu.com/mirrors.txt|sed 's/^http:\/\///;s/\/.*$//') ; do echo $(ping -c 1 $mirror|awk 'BEGIN {FS="[=]|[ ]"} NR==2 {print $11}') $mirror ; done|sort -n|grep "^[0-9]"|head -n 20
執行以後的結果:
2.49 mirror01.idc.hinet.net
3.47 debian.linux.org.tw
3.61 ubuntu.cs.nctu.edu.tw
5.45 ftp.tku.edu.tw
13.5 ftp.ntou.edu.tw
33.3 ubuntu.stu.edu.tw
40.8 ftp.ubuntu-tw.net
91.8 mirror.ncunwlab.tk
96.6 ftp.yzu.edu.tw
284 archive.ubuntu.com
看起來是中華電信最快,這時候再用 sed 去替換 sources.list 的來源即可。
sed 's/mirror:\/\/mirrors\.ubuntu\.com\/mirrors\.txt/http:\/\/mirror01\.idc\.hinet\.net\/ubuntu/' /etc/apt/sources.list | sudo tee /etc/apt/sources.list
系統出現這樣的訊息:
W: mdadm: the array /dev/md/3_0 with UUID d6ef77fc:c2faf3d8:1f51fb89:78ee93fe W: mdadm: is currently active, but it is not listed in mdadm.conf. if W: mdadm: it is needed for boot, then YOUR SYSTEM IS NOW UNBOOTABLE!
UNBOOTABLE 耶,不能忽視,萬一又開不了機怎麼辦?
雖然錯誤訊息就有提到該怎麼處理,我還是使用錯誤訊息去搜尋,找到以下這幾篇:
我的作法是,先使用 sudo /usr/share/mdadm/mkconf 產生 mdadm.conf ,然後備份 /etc/mdadm/mdadm.conf ,再覆寫過去。最後使用 sudo update-initramfs -u 來驗證是否有出現錯誤。
公司 gitlab 版本有點舊,搭配的 gitlab runner 得避免使用太新的版本,要不然會無法作用。請 google 幫忙了一下,在 StackOverflow 上找到解答:updates – How to prevent updating of a specific package? – Ask Ubuntu
所以我先使用
sudo apt-get install <package-name>==the_version
再使用
sudo apt-mark hold <package-name>
告知 apt 以後不要升級此套件即可。
這篇 command line – Execute sudo without Password? – Ask Ubuntu 講的很仔細,簡單說就是用 visudo 加入
username ALL=(ALL) NOPASSWD: ALL
就可以了。
我的作法是:
sudo groupadd sudo_nopass
sudo_nopass ALL=(ALL) NOPASSWD: ALL
sudo usermod -a -G sudo_nopass user
這樣 user 用 sudo 時,就不需要再輸入密碼了。
VirtualBox 可以用 vboxmanage guestcontrol 來有限度的控制 VM 裡的 GuestOS。
GuestOS 是 Ubuntu 的話,得安裝 virtualbox-guest-utils, virtualbox-guest-dkms ,安裝完以後,重新開機。
在 HostOS 裡,就可以用 vboxmanage guestcontrol 指令了。
# VirtualBox 5.x
vboxmanage --nologo guestcontrol "Ubuntu 16.04" run --exe /sbin/ifconfig --username ubuntu --passwordfile password.txt --wait-stdout --wait-stderr --verbose
參考資料:
Anbox 是一個以 container 來摹擬 Android 的技術,如此一來,就可以在 Ubuntu 裡執行 Android app。
按照 Anbox 的說明,得先安裝 snappy,snappy 是 Canonical 推的新的套件機制,軟體以類似 container 的方式安裝進去,不過這個技術推行快兩年了,用的人好像還是不怎麼多。安裝 snappy 的方法很簡單,只要安裝 snapd 就可以了:
sudo apt-get install snapd
。
安裝 snappy 以後,你還得要先登入 Ubuntu one 的帳號 (用法):
sudo snap login your_email
,之後才能依照 Anbox 的說明,進行安裝:
snap install --classic anbox-installer
。如果不先 login ,snap install 時,會不給安裝。
安裝 anbox-installer 以後,再執行
anbox-installer
就會啟動安裝程序了。
不過我還是安裝失敗了,anbox 說 Ubuntu 14.04 應該是可以安裝,但是實際狀況是有問題,我沒深究,就算了。
安裝 acd_cli 就可以了。
安裝跟使用可以參閱 https://acd-cli.readthedocs.io/en/latest/ ,用 pip3 install
git+https://github.com/yadayada/acd_cli.git 就安裝完了。不想裝到系統 /usr/local 的話,加上 –user,可以裝到 $HOME/.local 裡。
第一次使用要先 acd_cli sync,之後就可以使用上傳等功能了,最方便的是,acd_cli 可以利用 FUSE 掛載在某個資料夾下,這樣就可以用檔案總管或是 rsync 一類的軟體來處理了。
參考資料:
無意在 /etc/init.d 下看到 vboxweb-service 這個服務,好奇的把名字丟到 google 去找,才知道是 virtualbox 要提供給 phpvirtualbox 使用的服務。
安裝方法不難,不過我還是搞了好一陣子 (大約4個小時吧),以下是我所參考的文件。
我遇到的問題:
location /wiki {
root /var/www/wiki/public;
}
location ~ /wiki/.+\.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /var/www/wiki/public$fastcgi_script_name;
}
另外,啟動所需要的光碟 ISO 檔案或是已經有打包好的 disk image 無法透過 phpvirtualbox 上傳,必須要事先透過 SSH、FTP 等傳輸協定放到 host 上。
其他參考資料 (與 nginx/php5-fpm 相關的):