Category: Linux

  • 在 Ubuntu 14.04 上架設 IPSec VPN 伺服器

    在 Ubuntu 14.04 上架設 IPSec VPN 伺服器

    因為想要讓 Mac 能夠安全上網 (通常我想要 VPN 的時候會用 ssh tunnel),所以要在 DigitalOcean 的 VPS 上架設 IPSec VPN Server,首先找到的是 strongSwan,理論上裝好之後應該要可以使用才對,參考了以下的資料並且實際安裝,產生 key 之後: Ubuntu安装和配置strongSwan ArchLinux strongSwan SDB:Setup Ipsec VPN with Strongswan 還是不能用。總之 Mac 連不上去就是了。 垂頭喪氣之餘,上 github 搜尋並且改用了另一個我不喜歡的方式: 在 github 搜尋 docker ipsec 很好,馬上就有可行的方案可以使用,選擇了這個使用: hwdsl2/docker-ipsec-vpn-server 照著 README 來安裝: # Pull docker image docker pull hwdsl2/ipsec-vpn-server # Setting ~/vpn.env VPN_IPSEC_PSK=<IPsec pre-shared key>…

  • 於 Linux / GRUB2 環境下升級 Crucial SSD firmware

    於 Linux / GRUB2 環境下升級 Crucial SSD firmware

    GitHub: crucial-ssd-firmware-grub 0. 前言 本身有台 Thinkpad X220,內裝有 Micron Crucial SSD 兩顆,分別是 Crucial M4 mSata SSD 128G (CT128M4SSD3) 以及 Crucial MX200 256G (CT250MX200SSD1)。前者在 2012  年購買,後者在 2015 年購買。 這次想要升級的原因,是因為在 windows 下發現作為系統碟的 M4 mSata 出現多磁區錯誤以及重新分配的狀況,查看其韌體後發現是最老的版本 (01MH),目前網路上可以查到的版本為 07MH。為了 SSD 的健康,決定升級韌體。 在美光的網站下載相對應的韌體後,解壓縮開啟程式準備安裝。參照最新的 Guideline 後,可以得知目前 (2015後) 都會採用 bootable 的方式進行,因此不用再額外準備 USB 來製作開機碟。這是好事,但是一想到電腦上有 GRUB,就覺得有點問題。 果不其然,在安裝好韌體更新程式後,電腦自動重新開機,回到 GRUB2 的選單,選擇 windows 後轉入 repair mode。但是在這個環節出現無法開機 (not bootable)…

  • python pip 加速再加速 – 應用於 CI 建構 virtualenv 上

    最近在工作上遇到一個問題,我們的程式碼在 push 上 gitlab 後,CI 會自動的做 unittest 來檢查這次的 changes。同時環境是使用 virtualenv + python3。 用 pip 來管理相依套件不是什麼問題,但放上 CI 後就出現了一個很大的問題,CI 在建構 unittest virtualenv 的環境時,每次會把 workspace 清空,重新建立環境,在這個過程中花費最多的是步驟是在 pip 下載所有需要的套件以及編譯上。以我的狀況為例,整個 pip.require/base 中的套件安裝需要 209 秒的時間,如果在需要編譯套件的 slave 上,那就需要更久的時間。 每次推送後都需要等待過久的時間 (7+ min) 來執行 unittest 實在是忍無可忍,對於開發效率實在影響很大,因此去找了一些加速的方式。 1. 加速套件下載 pip 預設的下載方式是將相依的套件全部重新下載,這可以說是最花時間的一個步驟 (即便你有公司的 pypi server),要避免這個狀況,可以在 pip config file 中設定 cache 的使用。 首先建立這個檔案: ~/.pip/pip.conf 接著在裡面加上這些設定: [global] download-cache=/path/to/your/download-cache…

  • 中文翻譯 – 9 lessons from 25 years of Linux kernel development

    中文翻譯 – 9 lessons from 25 years of Linux kernel development

    原文網址:https://opensource.com/article/16/12/yearbook-9-lessons-25-years-linux-kernel-development Posted 14 Dec 2016 | Greg Kroah-Hartman 註:作者 Greg Kroah-Hartman,曾經來台在 COSCUP 2013 演講,是許多 linux tree 的 maintainer (usb driver core, debugfs, sysfs…etc),同時也是 staging 的 maintainer (staging 裏面有個地方是給新手練習 submit patch 的,greg kh 也會在 newbie mailing list 上解惑)。 他也是 Linux Device Drivers 跟 Linux Kernel in a Nutshell 的作者,台灣有翻譯前者,不過兩本書都很老了 (2.6的年代吧),他自己也有說LDD 4rd 近期大概不會出版QQ。 可以說 Greg KH 在 Linux…

  • Raspberry Pi 3 安裝 Arch Linux 記實 – 兼論 sync 指令

    Raspberry Pi 3 安裝 Arch Linux 記實 – 兼論 sync 指令

    今天把典藏已經很久的 Raspberry Pi 3 拿出來把玩,當然要配上 Linux distrobution 中最潮的 Arch Linux 才行囉 (極潮的還有 gentoo、LFS,可惜沒用過)。 不過,看著 Arch Linux ARM 官方的 Installation,心先涼了一半: Note: The current installation uses the 32-bit Raspberry Pi 2 armv7h root filesystem. This will be changing eventually to use our AArch64 repository to take full advantage of the ARMv8 Cortex-A53 cores. If you want an…

  • Mutex, Semaphore, the difference, and Linux kernel

    Mutex, Semaphore, the difference, and Linux kernel

    名詞定義 Mutex: Linux kenrel 中的 mutex lock, <include/mutex.h> Semaphore: Linux kernel 中的 semaphore, <include/semaphore.h> mutual exclusion: 中翻互斥鎖,一個概念,為了防止 concurrency 狀況下出現 race condition.   Mutex 與 Semaphore 最大的差異是: 理論上,你應該要先跟面試官或是問你這個問題的人互動,詢問一下其所謂的差異是指哪個部份 (實作、用途、還是結構?),以及詢問這個問題時,想要將兩者應用在那邊,對於後續的回答會有所幫助。 30秒:最大的差異在於 Mutex 只能由上鎖的 thread 解鎖,而 Semaphore 沒有這個限制,可以由原本的 thread 或是另外一個 thread 解開。另外,Mutex 只能讓一個 thread 進入 critical section,Semaphore 的話則可以設定要讓幾個 thread 進入。這讓實際上使用 Mutex 跟 Semaphore 場景有很大的差別。 _ 60秒 (cont.):舉例而言,Mutex 的兩個特性:一個是只能有持鎖人解鎖、一個是在釋放鎖之前不能退出的特性,讓…

  • 無法 build Linux kernel samples/bpf

    小結 總之,遇到問題記得先看 README.md / README.rst / README。   解決方式 在 linux/samples/bpf 這個資料夾裏面無法 build 出 sample 來 ➜ bpf git:(master) ✗ make make -C ../../ $PWD/ make[1]: Entering directory ‘linux’ CHK include/config/kernel.release CHK include/generated/uapi/linux/version.h CHK include/generated/utsrelease.h CHK include/generated/timeconst.h CHK include/generated/bounds.h CHK include/generated/asm-offsets.h CALL scripts/checksyscalls.sh DESCEND objtool LD linux/samples/bpf/built-in.o HOSTCC linux/samples/bpf/test_verifier.o HOSTCC linux/samples/bpf/libbpf.o HOSTLD linux/samples/bpf/test_verifier HOSTCC linux/samples/bpf/test_maps.o…

  • Archlinux – sar (sysstat) 使用疑難雜症解決

    如何在 Archlinux 安裝 sar (sysstat) sudo pacman -S sysstat ➜  sar -d Cannot open /var/log/sa/sa07: No such file or directory Please check if data collecting is enabled 在 systemctl 啟動 sysstat sudo systemctl start sysstat 開機時自動開啟 sysstat sudo systemctl enable sysstat ➜  sar -d Requested activities not available in file /var/log/sa/sa07 sysstat 沒有去擷取相關的資料,把他打開來。 > sudo nano /etc/conf.d/sysstat…

  • 在 Archlinux 編譯含有 debug symbols 的 glibc

    改用 git/chroot 來編譯 (2019/09/27 更新) 取得 glibc PKGBUILD git clone git://git.archlinux.org/svntogit/packages.git cd packages/glib/trunk 編輯 PKGBUILD,把 options 修改成 (!strip debug staticlibs) 後存檔 在 clean chroot 編譯 mkdir ~/chroot export CHROOT=$HOME/chroot mkarchroot $CHROOT/root base-devel arch-nspawn $CHROOT/root pacman -Syu makechrootpkg -c -r $CHROOT pacman -U <.pkg.tar.xz> 採用 ABS (Arch Build System) 方式去編譯 安裝 abs 套件 (pacman -S abs) 用…

  • 在 Linux 上不能用 pthread_delay_np

    在2016年系統軟體課程裏面有人提到:「為什麼不能用 pthread_delay_np,或是 pthread_cond_timewait等等」 會有這個問題是因為 jserv 在上到 pthread / concurrency 的時候常會提到中文界第一個以及唯一一個 pthread 文章翻譯「Getting Starated with POSIX Threads」,我們必須要考量到這篇文章翻譯的時間,是距今快要 20 年前的1998年翻譯完成的。當時使用的系統也不是 Linux,是 DEC OSF/1!作者另外也測試了 solaris 2.5.1 跟 SunOS 4.1.4。 回到正題,那為什麼 Linux 上不能用 pthread_delay_np 呢? 原因是因為,pthread_delay_np 只支援 HP-UX / VMS / Tru64 UNIX。pthread_delay_np() 存在於 POSIX.1c D4 draft,而 POSIX.1c D4 的 implementer 就是製作 OSF 的 DCE! 我們另外可以觀察到 pthread_delay_np 的後綴是 _np,代表這個function…