2018年12月11日 星期二

RHEL initrd 裡加 driver

例如 USB storage, AHCI, NVMe 這些東西..
dracut -v -f --add-drivers "ahci libahci libata usb_storage uas nvme nvme_core" -f /boot/initramfs-$(uname -r).img $(uname -r)

不過我真的很不想再碰 RHEL, 不管是 distro 本身還是用它的人.

2018年11月14日 星期三

TPM2 on rhel 7

after install TPM2 software package ( tpm2-abrmd, tpm2-tss, tpm2-tools, tpm2-tss-devel ), added one file "20-tss.rules" into /etc/udev/rules.d/
/etc/udev/rules.d/20-tss.rules :
---
KERNEL=="tpm*", MODE=="0600", OWNER=="tss", GROUP=="tss"
---

then trigger the udev daemon:
udevadm control --reload-rules;udevadm trigger

enable tpm2-abrmd
systemctl enable tpm2-abrmd;systemctl start tpm2-abrmd

ps. CentOS 7 does not need to added 20-tss.rules.

2018年11月7日 星期三

DKMS for it87

這個 it87.c 我已經忘記是哪裡拿的, 我猜是從比 4.16 更後面的 kernel source 裡拆出來用, 個別編譯的. 首先的, 先安裝 dkms, 而且建議版本為 2.3-3ubuntu4, 2.3-3ubuntu3 這版確定有 mkdeb 的 bug. 而 2.3-3ubuntu4 的 .deb 我是直接拿 ubuntu 18.04 裡的直接裝在 16.04 用. 檔案下載找這裡:
http://launchpadlibrarian.net/349013047/dkms_2.3-3ubuntu4_all.deb
還有安裝一個必要套件 "debhelper"

在這列一下研究出來的 dkms.conf
---
MAKE="make -C src/ KERNELDIR=/lib/modules/${kernelver}/build"
DEST_MODULE_LOCATION="/kernel/drivers/hwmon"
CLEAN="make -C src/ clean"
BUILT_MODULE_NAME=it87
BUILT_MODULE_LOCATION=src/
PACKAGE_NAME=it87
PACKAGE_VERSION=1.0
REMAKE_INITRD=no
---

src/ 裡的檔案:
compat.h  it87.c  Makefile

Makefile內容:
---
TARGET          := $(shell uname -r)
KERNEL_MODULES  := /lib/modules/$(TARGET)
KERNEL_BUILD    := /usr/src/linux-headers-$(TARGET)
SYSTEM_MAP      := /boot/System.map-$(TARGET)
DRIVER := it87
MOD_SUBDIR = drivers/hwmon
obj-m   := $(patsubst %,%.o,$(DRIVER))
obj-ko  := $(patsubst %,%.ko,$(DRIVER))
MAKEFLAGS += --no-print-directory
.PHONY: all install modules modules_install clean
all: modules
modules clean:
        @$(MAKE) -C $(KERNEL_BUILD) M=$(CURDIR) $@
install: modules_install
modules_install:
        cp $(DRIVER).ko $(KERNEL_MODULES)/kernel/$(MOD_SUBDIR)
        depmod -a -F $(SYSTEM_MAP) $(TARGET)
---

檔案一定要丟到 /usr/src/ 裡, 以下是我的內容, 版本為 1.0, 必需要有版本號. 以上沒提的檔案通通都可以忽略不用丟進去:
/usr/src/it87-1.0/
├── dkms.conf
├── ITE_Register_map.csv
├── ITE_Register_map.pdf
├── README
├── src
│   ├── compat.h
│   ├── it87.c
│   └── Makefile
└── TODO

這是 DKMS 一般的安裝手冊. 但是按照這個手冊跑, 它只是會編譯 .ko 檔跟安裝而已, 而我要的是每一次 upgrade kernel 時都要自己去編自己安裝...
https://help.ubuntu.com/community/DKMS
於是我簡化一下製作流程:
dkms add -m it87 -v 1.0
dkms build -m it87 -v 1.0
dkms mkdeb -m it87 -v 1.0

然後, 安裝已產生好的 deb:
dpkg -i /var/lib/dkms/it87/1.0/deb/it87-dkms_1.0_amd64.deb

這樣就可以確保每次更改 kernel 時外加的 kernel driver 也一起跟著被編譯, 被加入 initrd 裡.

sandisk extreme A2 microSD

很白爛的測試, 測試開機花掉的時間. OS: ubuntu xfce4 16.04.5(LTS) kernel 4.15.0-38, rootfs 為 btrfs, zlib:3 壓縮, no swap, 硬體為 iBASE IB897, atom E3845 1.91Ghz, 2+2GiB DDR3L-1600.
transcend class-10 8G: 64.62秒
sandisk exterme A2 64G: 59.90秒.

2018年8月19日 星期日

Windows 10 傳統注音輸入法

這裡要講的不是加 registry 把隱藏的純注音輸入法叫出來, 那種方法會僅只能在桌面 app 使用, 像 win10 專用的 app 如 LINE 就無法使用 (至於僅只能在桌面 app 使用的輸入法有沒有關係呢....? 對我來講僅只有 LINE 受影響而已, 關係不大), 而我自己是用 yahoo 輸入法, 這個輸入法很好用, 但再也沒人維護的情況下, 終就不是長久的解決之道, 也就是說, 一直沒有我滿意的解決方案.

而這個問題直到我發現 PIME 輸入法可以切換輸入法碼表 (也就是選字順序) 開始有了點改變..

PIME 怎麼樣就不是本篇重點不再介紹 (安裝時預設沒有傳統注音, 要自己勾選), 這裡我只寫出個人的設定筆記, 以下沒列的就是我沒改.
一般設定 -> 打字行為:
預設狀態 -> 預設以英文模式啟動
行為設定 -> 使用 Shift 快速切換中英文
候選清單 -> 使用空白鍵作為候選清單換頁鍵
候選清單 -> 優先以聯想字詞排序候選清單 (X) (勾掉不要)
輸出設定 ->
輸出設定 -> 允許內建符號輸入方式連續輸入
其它設定 -> 隱藏不必要的提示訊息

界面外觀 -> 界面設定:
每列顯示候選字個數: 10
每頁顯示候選字個數: 10

碼表設定 -> 輸入法碼表:
輸入法碼表: 傳統注音


最後一個對我很重要, 因為預設是泰瑞注音, 選字順序有很多都跟傳統注音不同, 對一個傳統注音用的很習慣, 早就把選字表背的牢牢的我來說, 改選字順序跟叫我換一個輸入法幾乎沒有差別,

PIME 這個輸入法有個好處, 你的主要語系如果是英文, 也不受影響.

2018年7月7日 星期六

mount --bind in fstab

ex:
/dev/shm /tmp none defaults,bind 0 0

ubuntu 底下加速蠻多的, 也不需要另外多加上 systemd 的 service.

2018年6月21日 星期四

sdelete for windows

簡單的說這個工具專門清洗非使用中磁區的, 對 SSD 有沒有用我不確定, 但如果你是 VM, VM 裡跑的又是較老舊的 OS 如 WinXP, VM 檔案又是放在有壓縮功能的檔案系統如 btrfs, zfs, 這個清除工具就可以幫你清出一些不用的空間出來.
https://docs.microsoft.com/en-us/sysinternals/downloads/sdelete

2018年5月30日 星期三

MBR 轉換到 GPT 筆記

現在這篇筆記是寫給已經裝在 MBR partition 的 ubuntu linux distro 轉換到 GPT partition 的手法, 轉換的條件有幾個:
  • 建議  x86-64 的系統. 這是 ubuntu 官方文件這樣建議, 不是我寫的. 以我所知道從 2011 年 intel 開始大力推展 UEFI BIOS 以來, 64bit UEFI 也可以開 32bit boot-loader, 反過來不行, 所以很大多數的板子用的都是 64bit UEFI (可能有些 intel reference board 還在死命抗拒 x86-64 還在用 ia32 UEFI 那不在我們討論範圍內..), 所以我也是建議使用 x86-64 的系統.
  • 磁碟的剩餘 sector 數必需大於 34, 因為 GPT partition 會有另一個備份 partition table 放在硬碟尾端 34 sectors 上, 所以轉換到 GPT 時需要保留. 在用 fdisk -l 看 MBR martition 硬碟時可以看到第一行硬碟機有多少 sectors 可用, 例如 
    •  Disk /dev/sdb: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
    • /dev/sdb2       59793408 1953521663 1893728256  903G 83 Linux 
    • 前者必需要比後者大最少 34. 一般來說較新的 distro fdisk 都會以 1MiB 當基本單位, 而硬碟機很少有可用空間是 1048576byte 整數倍的, 所以會碰上不能用的可能性實在不太高....
  • ubuntu 準備兩個套件 grub-efi-amd64 grub-efi-amd64-bin
轉換到 GPT, 直接使用 gdisk 開硬碟再存檔, 存的就是 GPT partition 了. 所以如果不打算改成 GPT 的話請記得千萬別存檔. 接下來, UEFI BIOS 認 boot-loader partition 有幾個方式:
  • UEFI 認得的 file system 種類. 我所知只有 FAT16, FAT32, NTFS, ext4不支援.
  • GPT partition 編號要為 ef00 (EFI System). (ubuntu 官方文件提到如果是 MBR, 用的就是 0xef, 而且要設定為 bootable. 但我沒有實驗過在 UEFI 下使用 MBR).
    • ps. ef02 為非必需.
  • EFI System 的有效大小看使用的檔案系統, FAT16 可以 512KiB 起跳, 但 FAT32 最少要 33MiB (含) 起跳, 否則 BIOS 認不到. 在做 mkfs.vfat 前保守一點用 wipefs -fa 清掉這個 FAT partition 殘存的資料, 否則有機會造成即使空間足夠, format 成 FAT32 BIOS 一樣認不到.
  •  預設基本目錄為 EFI/BOOT/BOOTx64.efi, EFI 底下不是 BOOT 它認不到, BOOT 底下沒有 BOOTx64.efi 也認不到, 別問我為什麼我不知道. asus 是這樣, VM workstation 也是這樣.
在 ubuntu 的安裝文件裡會建議 2048-4095 空出來作 GPT partition ef02,然而一般安裝 rootfs 都會從 2048 這裡開始, 除非是早期 redhat 會多建一個 FAT32 區擺 kernel / ramdisk image 區這種, 否則基本上不好挪空間. 如果再碰上 rootfs 大小不能變更的檔案系統 (特別是 zfs), 這個問題會更頭痛. 於是這時只好看 sector 2048 以前有沒有空間可用.

GPT partition 會使用頭尾 17KiB (33 sectors), 所以 34-2047 這段是空白沒有使用的. 過去 grub2 在 MBR 裡會把 2nd boot section 擺在 2-63 sectors 這段空間裡, 在 GPT 我就不知道它擺在哪, 總之我把這段空間整段抹掉拿來做 GPT ef00 partition 竟然是可以用的. 只能說 grub2 好厲害. 不過因為這段僅只有 1007KiB, 所以只能使用 FAT16 的格式.
#update190109: 只需要 1007KiB 大小的是比較舊的 grub, grub2 用的 efi 檔案總共有 4MiB 以上,  不能再使用這種方法安裝. 新版的 grub2 efi 好處是在 grub.cfg 裡就可以指定 disk uuid 可以隨時更改, 壞處是檔案變的很肥大...

而在 gdisk 裡操作切割 34-2047 這段, 要在 gdisk 下, 先切 "x" Expert command mode 下用 "l" (L) 將基本區塊指定為 1 (預設為 2048, 1MiB), 再切 "m" 回一般模式, 就可以手動分割出 34-2047 這段為一個 partition 出來. 設定好 partition type 為 ef00 後, 用 "s", 就可以自動排序成該有的先後順序.

假設目標硬碟為 /dev/sdX, EFI System partition (ef00) 為 /dev/sdX1, rootfs 為 /dev/sdX2, 工作目錄為 /tmp/rootfs, /dev/sdX1 記得要掛在 rootfs 的 boot/efi/ 下:
  • mount /dev/sdX2 /tmp/rootfs
  • mkdir -p /tmp/rootfs/boot/efi
  • mount /dev/sdX1 /tmp/rootfs/boot/efi
然後才是安裝 grub:
grub-install \
--recheck \
--force \
--target=x86_64-efi \
--bootloader-id=ubuntu \
--boot-directory=/tmp/rootfs/boot/ \
--efi-directory=/tmp/rootfs/boot/efi/ \
--modules="part_gpt ext2" \
/dev/sdX

mkdir -p /tmp/rootfs/boot/efi/EFI/BOOT
mv /tmp/rootfs/boot/efi/EFI/ubuntu/grubx64.efi /tmp/rootfs/efi/EFI/BOOT/bootx64.efi
update 20181218: 以上紅字為使用 ubuntu 版 amd64 grub2 binary 時 "必需" 字串與步驟. bootloader-id 為什麼非 ubuntu 不可這別問我, 我不知道. move 到 EFI/BOOT/bootx64.efi 前面有說, 也是必需, 否則一堆板子認不到.

2018年5月10日 星期四

`linux-update-symlinks` is not available.

一如 bug report 所說, 是 linux-base 這個套件有少東西, 須要升級. 但是沒有講要升到哪一版. 我測試的結果是必需要 4.5 (4.5ubuntu1)開始才有:
https://packages.ubuntu.com/bionic/linux-base

google 到的都是一堆廢話, 就是沒有寫怎麼解. 下載上面那個安裝包裡的東西再 dpkg -i 就可以了.

2018年4月27日 星期五

yocto rebuild package

rebuild 其實很簡單, -f -c clean 再 -f -c deploy (有的套件不支援) 或 -f -c compile 就好. 麻煩的是你要知道這套件叫什麼名字. 因為隨著引入的 meta 套件不同, 命名會有所不同.
例如在 error task log 裡有提到
qtquickcontrols2_git.bb
在 yocto 的套件命名規則裡, 底線 "_" 之後都是版本, 之前都是套件名稱, 所以特別把在這之前的名稱過濾出來即可:
bitbake qtquickcontrols2 -f -c clean;bitbake qtquickcontrols2 -f -c compile
多下一個 clean 會比較保險.

linux kernel 在 yocto 官方名稱記得是叫 linux-yocto, 所以像 intel 的 yocto bsp 重編 kernel 你就要下 bitbake linux-yocto -f -c deploy

2018年3月19日 星期一

android ignore imgdiff

when build system image (target command "systemimage") got the shit message:
"failed to break apart source image"
fuck it!

modify the code to ignore this idiot work:
"bootable/recovery/applypatch/imgdiff.cpp"
int main(int argc, char** argv) {
   int zip_mode = 0;
+   return 0; //return "success" direct, don't do anything stupid.
...
}

I don't know why added garbage work here, may guess CPU toooo fast? fuck..


2018年3月14日 星期三

wpa_supplicant assign MAC address

參考
這是指定 AP MAC address 的做法. 這種場合是你不能設定 AP 名稱, AP 的 2.4Ghz / 5Ghz 都用一樣的 SSID, 或你只需要連上某個特定的 AP 時, 就需要這樣做:
FILE /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
ap_scan=1

network={
        bssid=00:50:17:31:1a:11
        ssid="YourSSID"
        psk="your-secret-key"
        scan_ssid=1
        proto=RSN
        key_mgmt=WPA-PSK
        group=CCMP TKIP
        pairwise=CCMP TKIP
        priority=5
}
題外話. 在這之前台北捷運無線網路不管是車廂內還是站內都用同一個 SSID, 變成座車時只要站內的信號比較強, android 內 wpa_supplicant 就會很雞婆的切換過去, 然後就不能上網了. wpa_supplicant 動作又慢, web browser 動作也慢, 手機 CPU 動作更慢, 等到認證可以連上網時車子已經離站了, 然後你又要再連線一次...
現在有 ".TPE-FGreeADWifi-Car" 這個車廂內專用 SSID 可用, 才解決這個問題.

2018年3月10日 星期六

Windows 10 update

〔Win〕+〔R〕並輸入「gpedit.msc」後再按下〔確定〕鈕。 進入了「群組原則編輯器」畫面後,請展開左邊「電腦設定」→「系統管理範本」→「 Windows元件」→「Windows Update」,並點選兩下右邊的「設定自動更新」。 預設值是「尚未設定」,請點選「已啟用」後在選項上指定2或4
來源

Win+R -> gpedit.msc -> LocalComputerPolicy->ComputerConfiguration->AdministrativeTemplates-> WindowsComponents->WindowsUpdate->ConfigureAutomaticUpdates->Enable->Select 2

在噓你機器上有確定要手動按才會更新,暫時不會亂搞了。

update 2018/05/01: 功能更新 (RS4) 不會擋, 看來必需要有更強制的手段

2018年2月13日 星期二

排骨雞乾麵

簡單的講結論, 要我給分數我會給 6 分 (滿分10分)


然後才是我的評價.

首先的它的醬包跟湯麵版的只是很接近, 並不一樣, 油比較少比較稠, 可能是為了某些人會留些麵湯的吃法設想. 雖然說不是很好拌, 但比起一堆流動油質的醬料包比起來感覺較有料, 麵著味的比較徹底. 但醬料裡也跟湯麵版的醬料一樣有不知所謂的類排骨肉塊, 這種東西在湯麵裡有水可以吸還比較好, 但放到乾麵裡來就會顯的很失敗. 如果要我建議, 我會建議這種料要不再打碎一點, 要不就拿掉.

粉包. 粉包之所以擺醬包後面寫是因為我認為粉包放的時間要抓的夠好, 殘湯也要在某種程度以上時放下去最好. 它的粉包跟湯麵版完全一樣, 也有糖醃過的高麗菜 (整個排骨雞麵裡幾乎最畫龍點睛的單位我認為就是它), 但這是乾麵, 所以一般的吃法是把這種料變成湯料..... 當然啦, 以我的泡法來說我並不喜歡這樣, 我喜歡吃重鹹, 不管是維力雜醬麵還什麼乾麵, 我都把這種粉包, 在整包麵全都泡軟, 水倒到一半時, 再下下去, 再讓這些湯料包吸收水份. 這時湯料包的鹽還有調味料可以附在麵上, 讓麵體並不會那麼清淡. 這樣做法的缺點就是要特地抓時間, 抓水量, 這樣的做法其實已經脫離 "方便" 的意義.

再來把麵湯都倒掉後, 才是上前面講的醬料.

再來講它的麵體. 它的麵體屬於那種泡不爛, 要高溫開水的那種, 基本上沒 5 分鐘以上搞不定, 而且更別說它在正常的碗裡面都要壓碎幹麻的, 水淹不到全部, 還要翻翻再泡這樣. 要快的話我會建議找統一蔥燒牛肉麵, 那是目前我所知麵類 (米粉麵線那些不算) 裡真正 3 分鐘 50 度水溫搞的定的麵種. 而本文講的這種麵種, 連全家賣的關東煮用拉麵都比它容易泡開.





就是這個. 拿來拌乾麵真的超讚. 又不會有拉麵那討人厭的鹼水味. 所以結論是這種麵條, 如果你願意等個 10 分鐘的話, 它可以很可口很好吃. 不想等的話, 整碗拿去微波爐裡再加熱個 90 秒....

最後呢, 分數給那麼低主要還是因為麵要花太長久的時間才泡的開, 其它粉包醬料嘛...... 臺灣泡麵都長那樣, 評分沒啥意義.


2018年2月1日 星期四

yocto 編譯跳過 EULA

bash script

export EULA=1
source fsl-setup.release.sh
bitbake fsl-image-qt5

2018年1月24日 星期三

test

有人說不知道怎麼貼..

2018年1月17日 星期三

Windows Services for UNIX 3.5

我因為還有些拉檔軟體要跑所以還有在使用很老舊的 Windows XP, 使用它的理由也很簡單, 512MiB RAM 就可以跑的好好的. 裝這個沒什麼目地, 就只是給老舊的 Windows XP 可以連 NFS 而已. 檔案來這裡找:
http://www.filewatcher.com/m/SFU35SEL_EN.exe.228178504-0.html

怎麼用可以參考這篇
https://technet.microsoft.com/zh-tw/library/cc754350(v=ws.11).aspx

唯需注意的是在 windows 下使用的路徑一樣, 所以 NFS 跟 samba 共用的資源名稱最好不要一樣, 以方便 windows 去認哪個是哪個. 使用 NFS 我主要的目地只是拿來取代原本的 SMB 而已, NFS 有比 SMB (網芳) 要快嗎? 沒有, 略慢於 SMB.. 但 Windows 端最主要的 performance issue 會在 NTFS + 有開啟檔案壓縮上, 只要有開壓縮就會變的奇慢, 這個問題一直到 Windows 10 (build 1709) 上都存在.
而 btrfs 跟 zfs 即使有開啟檔案壓縮, 也並不會像 NTFS 掉速剩 1/4 如此誇張.

Windows 的 disk IO 能力大家都知道, 別 complain 它了..

2018年1月3日 星期三

cifs mount

在 ubuntu 的 kernel 套件 kernel 4.13 開始似乎不再支援 smb ver.1, kernel 本身的支援能力倒是沒什麼太大問題, 有問題的地方在預設似乎都用 smb ver.1 ?? 所以會被 (例如 win10) 擋下來.

解法很簡單, mount cifs 時 option 多加一個 vers=, ex:
mount -t cifs //127.0.0.1/testfs /tmp/rootfs -o vers=2.1

各版 windows SMB 版本參考
https://blogs.technet.microsoft.com/josebda/2012/06/06/windows-server-2012-which-version-of-the-smb-protocol-smb-1-0-smb-2-0-smb-2-1-or-smb-3-0-are-you-using-on-your-file-server/