2018年12月28日 星期五

Gentoo 使用 soft raid

參考 https://wiki.gentoo.org/wiki/Complete_Handbook/Software_RAID

要加上 kernel modules
raid0, 或其他的

移除舊的 disk array
mdadm --stop /dev/md0
mdadm --remove /dev/md0
建立由 2 顆硬碟構成 mirror 的 disk array
mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdd1 /dev/sde1
蠻奇怪的,原先並未先建立 partition,直接用 /dev/sdd 及 /dev/sde,建好的 array 會不見,查到的一些資料,是用 /dev/sdd1 及 /dev/sde1,那就試試看先建 partition,再建 raid。
這裡有人討論使用整顆硬碟與分割區來建立 raid 的差別,What's the difference between creating mdadm array using partitions or the whole disks directly

檢視 disk array 建立的進度
# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] 
md0 : active raid1 sde1[1] sdd1[0]
      7813893440 blocks super 1.2 [2/2] [UU]
      [=>...................]  resync =  6.2% (489861248/7813893440) finish=678611.9min speed=179K/sec
      bitmap: 58/59 pages [232KB], 65536KB chunk

unused devices: <none>


檢視 disk array 的細節
# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Dec 28 21:58:07 2018
        Raid Level : raid1
        Array Size : 7813894464 (7451.91 GiB 8001.43 GB)
     Used Dev Size : 7813894464 (7451.91 GiB 8001.43 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Sat Dec 29 16:57:35 2018
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : bitmap

              Name : aj-i7:0  (local to host aj-i7)
              UUID : 6240fb09:05a34525:822baca9:8744a832
            Events : 13861

    Number   Major   Minor   RaidDevice State
       0       8       48        0      active sync   /dev/sdd
       1       8       64        1      active sync   /dev/sde

要把硬碟加回 disk array 時
mdadm /dev/md1 --re-add /dev/sda2
使用 mdadm --assemble 指令,可以重新 Assemble 先前建立的 array。

使用上,不用建立分割區,直接 mkfs.ext4 /dev/md0 即可。

使用的問題

剛開始使用,還不熟悉,常常不曉得 disk array 在那裡。
建好後,隔幾天又找不到 raid 了,
# mdadm --detail /dev/md0
mdadm: Array associated with md device /dev/md0 does not exist.
一直以為它又死了,再看 proc 的 status,卻又存在
# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] 
md127 : active (auto-read-only) raid1 sdd1[0] sde1[1]
      7813893440 blocks super 1.2 [2/2] [UU]
      bitmap: 0/59 pages [0KB], 65536KB chunk

unused devices: <none>
後來用 scan,終於找到了,不曉得怎麼改名了,改名的規則也不知是什麼。

# mdadm --detail --scan
ARRAY /dev/md/aj-i7:0 metadata=1.2 name=aj-i7:0 UUID=c984ff63:4925d7b3:d8922bdc:e9cc0d57

# ls -l /dev/md*
brw-rw---- 1 root disk 9,   0  2月 13 10:06 /dev/md0
brw-rw---- 1 root disk 9, 127  2月 13 10:06 /dev/md127

/dev/md:
總計 0
lrwxrwxrwx 1 root root 8  2月 13 10:06 aj-i7:0 -> ../md127

還在慢慢的適應這個玩意中。


Gentoo 使用 lm_sensors

參考 http://linux.vbird.org/linux_basic/0610hardware/0610hardware-fc4.php

# emerge -av sys-apps/lm_sensors

# sensors-detect
Scan for sensors of south bridges, CPUs or memory controllers
Intel digital thermal sensor...                             Success!
    (driver `coretemp')
Scan for Super I/O sensors
Found `Nuvoton NCT6793D Super IO Sensors'                   Success!
    (address 0x290, driver `nct6775')

probe the I2C/SMBus adapters now? (YES/no): 
Using driver `i2c-i801' for device 0000:00:1f.4: Kaby Lake (PCH)
Module i2c-dev loaded successfully.

Now follows a summary of the probes I have just done.
Driver `coretemp':
  * Chip `Intel digital thermal sensor' (confidence: 9)

Driver `nct6775':
  * ISA bus, address 0x290
    Chip `Nuvoton NCT6793D Super IO Sensors' (confidence: 9)

執行 etc-update,寫入設定檔,其所產生的 /etc/modules-load.d/lm_sensors.conf,。如下
# Generated by sensors-detect on Fri Dec 28 19:43:42 2018
coretemp
nct6775

要重新編譯 kernel,make xconfig 或 make menuconfig,加上下面兩個 driver module。
在 Device Drivers/Hardware Monitor Support 項目下
Intel Core/Core2/Atom temperature sensor (SENSORS_CORETEMP)
Nuvoton NCT6775F and compatibles (SENSORS_NCT6775)

 # make -j8 && make modules_install && make install

2018年12月21日 星期五

使用 rclone 同步雲端硬碟

原來是使用 net-misc/drive 的 Google Drive client 來同步 Google 的雲端硬碟。可是在使用 push 指令來 sync 整個目錄時,會一直出現很多個重複的目錄,例如
ds +- etc/a.txt
   +- etc/b.txt
   +- etc/....

好像也沒有辦法避免這種困擾,猜想在進行同步時,是可以平行上傳檔案,而 Google drive 是以 unique id 來代表,如下列網址代表 [我的雲端硬碟 > ds > etc] 的目錄
https://drive.google.com/drive/folders/1TNCFVIHv8wzcOvAt2q0xq7VL2TyFzJfe?ogsrc=32
後來,找到 rclone 這個程式,可以指定一次傳一個檔案,就可以解決上述問題。另外,這個程式看起來,更成熟完備一點。

sync 的指令
rclone sync "dspace.calendar/etc/" "gDspace:GET_proj/dspace_backup/dspace.calendar/etc" -v -u --fast-list -P --checkers 1 --transfers 1
要注意目錄的表示法,不然會 sync 到上一層或下層目錄。

備份的畫面
2018-12-22 10:53:35 INFO  : assetstore/11/01/26/110126386227520817426129509087509376115_dir/00001/TileGroup0/1-0-1.jpg: Copied (new)
2018-12-22 10:53:41 INFO  : assetstore/11/01/26/110126386227520817426129509087509376115_dir/00001/TileGroup0/1-1-0.jpg: Copied (new)
2018-12-22 10:53:43 INFO  : assetstore/11/01/26/110126386227520817426129509087509376115_dir/00001/TileGroup0/1-1-1.jpg: Copied (new)
Transferred:      694.862M / 1.385 GBytes, 49%, 213.906 kBytes/s, ETA 57m44s
Errors:                 0
Checks:               155 / 155, 100%
Transferred:          547 / 10549, 5%
Elapsed time:    55m26.3s
Transferring:
 *     assetstore/11/01/26/…TileGroup0/2-0-0.jpg: 100% /10.567k, 0/s, -


2018年12月20日 星期四

在 Gentoo 啟動 Vmware Workstation Server

首先使用  stefantalpalaru 的 gentoo-overlay/app-emulation/ 安裝 vmware-workstation-15.0.2.10952284-r2。USE flag 主要為 "server -bundled-libs"。

產生憑證

要產生憑證,參考 Create Self-Signed Certificates
建立 openssl.cnf
[req]
default_bits            = 2048
default_keyfile         = rui.key
distinguished_name      = req_distinguished_name
#Don't encrypt the key
encrypt_key             = no
prompt                  = no
string_mask             = nombstr

[ req_distinguished_name ]
countryName             = US
stateOrProvinceName     = California
localityName            = Palo Alto
0.organizationName      = VMware, Inc.
emailAddress            = ssl-certificates@vmware.com
commonName              = localhost.localdomain
然後執行指令
openssl req -nodes -new -x509 -keyout rui.key -out rui.crt -days 3650 -config openssl.cnf
再將 rui.crt 和 rui.key 複製到 /etc/vmware/ssl/ 的目錄下。

其實在 trace 安裝的程式檔後,發現不用這麼麻煩,在安裝的 /etc/init.d/vmware-workstation-server 中,即有檢查和產生憑證的指令
# Check if certificates exist.  If not, we need to generate them, ala sshd.
if [ ! -e /etc/vmware/ssl/rui.key -o ! -e /etc/vmware/ssl/rui.crt ]; then
    checkpath -d -m 0600 /etc/vmware/ssl
    openssl req -x509 -days 365 -newkey rsa:2048 -keyout /etc/vmware/ssl/rui.key -out /etc/vmware/ssl/rui.crt -config /etc/vmware/ssl/hostd.ssl.config
    checkpath -f -m 0600 /etc/vmware/ssl/rui.key /etc/vmware/ssl/rui.crt
fi

建立 service

參考 /etc/init.d/vmware-workstation-server,建立 /lib/systemd/system/vmware-workstation-server.service
[Unit]
Description=VMware Workstation Server
Wants=vmware-authentication.service
Wants=vmware.target

[Service]
Type=simple
PIDFile=/var/run/vmware/vmware-hostd.PID
#ExecStartPre=/opt/vmware/sbin/vmware-authdlauncher
ExecStart=/opt/vmware/bin/vmware-hostd -a -d /etc/vmware/hostd/config.xml

Restart=on-abort

[Install]
WantedBy=multi-user.target
在 terminal 中,以 root 的身分執行 vmware,會出現下列錯誤 
/opt/vmware/lib/vmware/bin/configure-hostd.sh: line 15: rc-service: command not found

rc-service 的指令,那是 OpenRC 的指令,查詢 service 的 status。後來在 CentOS 7 安裝,參考安裝後的程式,確認其功能,若是啟動則傳回 on,否則為 off。

修改 /opt/vmware/lib/vmware/bin/configure-hostd.sh,把 rc-service 的指令改成 systemctl。
#!/bin/bash

action="$1"

case $action in
  add)
    #rc-update -q add vmware-workstation-server default
    #rc-service vmware-workstation-server start
    systemctl -q enable vmware-workstation-server
    systemctl -q start vmware-workstation-server
    ;;
  remove)
    #rc-update -q del vmware-workstation-server default
    #rc-service vmware-workstation-server stop
    systemctl -q disable vmware-workstation-server
    systemctl -q stop vmware-workstation-server
    ;;
  status)
    # rc-service -q vmware-workstation-server status
    systemctl -q is-active vmware-workstation-server && echo on || echo off
    ;;
  *)
    exit 1
    ;;
esac
另外,可能出現下列錯誤,設定環境變數 export VMWARE_USE_SHIPPED_GTK=force,可解決問題
/opt/vmware/lib/vmware/lib/libstdc++.so.6/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /usr/lib64/libproxy.so.1)
Failed to load module: /usr/lib/gio/modules/libgiolibproxy.so
後來,將 app-emulation/vmware-workstation 的 use flag 的 bundled-libs 拿掉,就不再出現上述錯誤。

在 /opt/vmware/bin 少了 vmware-vim-cmd,自行解壓 VM*.bundle,然後從 vmware-workstation-server 下 copy 過來。執行後,出現下列錯誤。
$ vmware-vim-cmd
filename:       /lib/modules/4.14.83-gentoo/misc/vmmon.ko
supported:      external
license:        GPL v2
description:    VMware Virtual Machine Monitor.
author:         VMware, Inc.
depends:        
retpoline:      Y
name:           vmmon
vermagic:       4.14.83-gentoo SMP mod_unload 
[AppLoader] Cannot get library dependencies. (4c)

[AppLoader] Fallback to use all shipped libraries.
[AppLoader] Cannot get library dependencies. (4c)

[AppLoader] Fallback to use all shipped libraries.
[AppLoader] Fail to launch with shipped libraries.
Fail to load executable. Exiting.
錯誤資訊在 /tmp/vmware-ajax 下,內容如下
$ cat vmware-apploader-9054.log
2019-01-28T11:04:53.416+08:00| appLoader| I125: Log for appLoader pid=9054 version=15.0.2 build=build-10952284 option=Release
2019-01-28T11:04:53.416+08:00| appLoader| I125: The process is 64-bit.
2019-01-28T11:04:53.416+08:00| appLoader| I125: Host codepage=UTF-8 encoding=UTF-8
2019-01-28T11:04:53.416+08:00| appLoader| I125: Host is Linux 4.14.83-gentoo Gentoo Base System release 2.6
2019-01-28T11:04:53.416+08:00| appLoader| W115: Unable to get output of command "/usr/bin/lsb_release -sd 2>/dev/null"
2019-01-28T11:04:53.416+08:00| appLoader| I125: Invocation: "/opt/vmware/lib/vmware/bin/vmware-vim-cmd"
2019-01-28T11:04:53.416+08:00| appLoader| I125: Calling: "/opt/vmware/lib/vmware/bin/vmware-vim-cmd"
2019-01-28T11:04:53.416+08:00| appLoader| I125: VMDEVEL not set.
2019-01-28T11:04:53.416+08:00| appLoader| I125: Using configuration file: /etc/vmware/config
2019-01-28T11:04:53.416+08:00| appLoader| I125: Use library directory: /opt/vmware/lib/vmware
2019-01-28T11:04:53.416+08:00| appLoader| I125: Setup root library: /opt/vmware/lib/vmware/bin/vmware-vim-cmd
2019-01-28T11:04:53.417+08:00| appLoader| I125: Try libraries from cached path.
2019-01-28T11:04:53.417+08:00| appLoader| E110: ldd(1) failed with errno 24: Too many open files (3,-1)
2019-01-28T11:04:53.417+08:00| appLoader| E110: ldd(1) failed with errno 24: Too many open files (4,-1)
2019-01-28T11:04:53.417+08:00| appLoader| I120: Fallback to use all shipped libraries.
2019-01-28T11:04:53.417+08:00| appLoader| E110: Fail to launch with shipped libraries.
2019-01-28T11:04:53.417+08:00| appLoader| W115: Unable to load dependencies for /opt/vmware/lib/vmware/bin/vmware-vim-cmd
2019-01-28T11:04:53.417+08:00| appLoader| W115: Unable to execute /opt/vmware/lib/vmware/bin/vmware-vim-cmd
上述 log 有兩個錯誤,第一個是缺少 lsb-release 指令,只要 emerge -av sys-apps/lsb-release 安裝即可。

另外一個是是
SSetup root library: /opt/vmware/lib/vmware/bin/vmware-vim-cmd

與 CentOS 下正常運作的結果比較,應該是
Setup root library: /usr/lib/vmware/lib/libvmware-vim-cmd.so/libvmware-vim-cmd.so
而 libvmware-vim-cmd.so 是一個指到 libvmware-hostd.so 的 link
# ls -l /usr/lib/vmware/lib/libvmware-vim-cmd.so/libvmware-vim-cmd.so 
lrwxrwxrwx. 1 root root 57  1月 27 15:21 /usr/lib/vmware/lib/libvmware-vim-cmd.so/libvmware-vim-cmd.so -> /usr/lib/vmware/lib/libvmware-hostd.so/libvmware-hostd.so

其實,/opt/vmware/lib/vmware/bin 下的執行檔,大多是指到 appLoader 的symbolic link,如 vmware,vmware-hostd 等。然而,像執行 /opt/vmware/bin/vmware-hostd 時,都可以正確的Setup root library,唯獨 vmware-vim-cmd 不行,真是詭異。

最後確認,只要建立正確的 symbolic link 即可。只是在嘗試的過程中,建立的 link 是錯的,就一直失敗。
# ln -sf /opt/vmware/lib/vmware/lib/libvmware-hostd.so/libvmware-hostd.so libvmware-vim-cmd.so/libvmware-vim-cmd.so

後來發現很早以前,自己就曾整理過相關資料了,Enable Vmware Workstation Server

systemctl stop vmware-workstation-server.target 時,自動開機的 VM 會自動關閉。不過VM 必須安裝 vmware tool。
# systemctl status vmware-hostd.service
 vmware-hostd.service - VMware Workstation Server
   Loaded: loaded (/lib/systemd/system/vmware-hostd.service; static; vendor preset: disabled)
   Active: deactivating (stop) since Tue 2019-01-29 12:51:41 CST; 18s ago
  Process: 30743 ExecStartPre=/bin/sh /opt/vmware/lib/vmware/bin/check-certificates.sh (code=exited, status=0/SUCCESS)
 Main PID: 30774 (vmware-hostd); Control PID: 31034 (sh)
    Tasks: 37 (limit: 4915)
   Memory: 3.0G
   CGroup: /system.slice/vmware-hostd.service
           ├─30774 /opt/vmware/lib/vmware/bin/vmware-hostd -a /etc/vmware/hostd/config.xml
           ├─30837 /opt/vmware/lib/vmware/bin/vmware-vmx -s sched.group= -# product=1;name=VMware Workstation;version=15.0.2;buildnumber=10>
           ├─31034 /bin/sh /opt/vmware/lib/vmware/bin/shutdown-autostart-vm.sh
           └─31052 /opt/vmware/lib/vmware/bin/vmware-vim-cmd -U root hostsvc/autostartmanager/autostop

 1月 29 12:51:41 aj-i7 sh[31034]: filename:       /lib/modules/4.14.83-gentoo/misc/vmmon.ko
 1月 29 12:51:41 aj-i7 sh[31034]: supported:      external
 1月 29 12:51:41 aj-i7 sh[31034]: license:        GPL v2
 1月 29 12:51:41 aj-i7 sh[31034]: description:    VMware Virtual Machine Monitor.
 1月 29 12:51:41 aj-i7 sh[31034]: author:         VMware, Inc.
 1月 29 12:51:41 aj-i7 sh[31034]: depends:
 1月 29 12:51:41 aj-i7 sh[31034]: retpoline:      Y
 1月 29 12:51:41 aj-i7 sh[31034]: name:           vmmon
 1月 29 12:51:41 aj-i7 sh[31034]: vermagic:       4.14.83-gentoo SMP mod_unload
 1月 29 12:51:42 aj-i7 /opt/vmware/lib/vmware/bin/vmware-hostd[30774]: Accepted password for user root from ::1

安裝完之後,/etc/vmware/netmap.conf 有網路的設定,不然 VM 會沒網路
# This file is automatically generated.
# Hand-editing this file is not recommended.
network0.name = "Bridged"
network0.device = "vmnet0"
network1.name = "HostOnly"
network1.device = "vmnet1"
network2.name = "NAT"
network2.device = "vmnet8"

還有要執行
emerge --config app-emulation/vmware-workstation
但很奇怪,執行之後,netmap.conf 的內容會不見

2018年12月18日 星期二

複製 CentOS 5 系統

老掉牙的系統,但為了讓系統繼續撐著,要想辦法轉成 VM。可以使用 Vmware 的 Converter 程式來將實體機轉成 VM。不幸的是,並非總是能成功的使用 Converter 來轉成 VM,我要轉的系統即是此種不成功的例子。既然如此,就藉此機會來練功一下,學習如何手動移轉 Linux 系統,不用重新安裝。

備份檔案

要複製系統的硬碟,視自己的狀況,可以直接接上電腦,也可以用 USB 界面連接。
首先,依據原系統的規劃及使用狀況,在新的硬碟上,建立分割區。由於 CentOS 5 的 bootloader 使用 GNU GRUB 0.97,硬碟的 partition table 只能用 MBR ,不能使用 GPT。

我所用的硬碟分割規劃如下
檔案系統              容量  已用 可用 已用% 掛載點
/dev/sda3            23G   16G  6.3G  72% /
/dev/sda5            19G  6.9G   11G  40% /home
/dev/sda1           243M   26M  205M  12% /boot
/dev/sda6           244G  170G   62G  74% /opt
然後,依次複製每個分割區的檔案,其中 -xdev 的選項,是只讀取該分割區的檔案。
mount /dev/sda1 /mnt/hdd
cd /boot
find ./ -xdev -print0 | cpio -pa0V /mnt/hdd

mmount /dev/sda3 /mnt/hdd
cd /
find ./ -xdev -print0 | cpio -pa0V /mnt/hdd

mount /dev/sda5 /mnt/hdd
cd /home
find ./ -xdev -print0 | cpio -pa0V /mnt/hdd
針對要複製的目錄,重複執行上述步驟。

重建 initrd

要下載 CentOS 5.x 的 ISO 來執行 linux rescue
重建 initrd 才行
mkdir /mnt/sysimage
mount /dev/sda3 /mnt/sysimage

mount --bind /proc /mnt/sysimage/proc
mount --bind /dev /mnt/sysimage/dev
mount --bind /sys /mnt/sysimage/sys
chroot /mnt/sysimage

mount /dev/sda1 /boot
cp -p /boot/initrd-$(uname -r).img /boot/initrd-$(uname -r).img.bak
mkinitrd -f -v /boot/initrd-2.6.18-371.el5.img 2.6.18-371.el5
用不同版本的 CentOS 或其他的 Linux OS 所建立的 initrd,在開機時,會出現錯誤。下圖是使用原來的 initrd 所出現的錯誤,無法找到 swap 分割區。

設定 grub

執行及進入 grub 後
grub> root (hd0,0)
grub> setup (hd0)
修改 grub.conf,重新開機。
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-400.1.1.el5)
    root (hd0,0)
    kernel /vmlinuz-2.6.18-400.1.1.el5 ro root=UUID=bfe28135-6004-4078-ae40-14dbbf727354 rhgb quiet
    initrd /initrd-2.6.18-400.1.1.el5.img
title CentOS (2.6.18-92.el5)
    root (hd0,0)
    kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/ rhgb quiet
    initrd /initrd-2.6.18-92.el5.img
在 grub 中,硬碟編號由 hd0 開始。root 是設定系統的分割區,可以用 root=/dev/sda3,也可以用 label 或 uuid。用 /dev/sda3 來指定,當接線改變,或硬碟編號改變,會有找不到 root device 的困擾,用 uuid 則可確保找到正確的分割區。使用指令 blkid,可以列出分割區的 uuid。


2018年12月15日 星期六

新購電腦 - CPU i9 9900K

規格及配備

Intel Core i9-9900K CPU @ 3.60GHz
主機板 ASUS PRIME Z370M-PLUS II,LGA1151

Intel Core i7-5820K CPU @ 3.30GHz
主機板 ASUS STRIX X99 GAMING,LGA2011-3

Intel Core i7-3930K CPU @ 3.20GHz
主機板 Gigabyte GA-X79S-UP5-WIFI,LGA2011

Intel Xeon CPU E5-2660 @ 2.20GHz
主機板 Huana X79,LGA2011

性能比較

針對新購的電腦做一個效能的比較,編譯指令如下
time emerge lxde-base/lxterminal

三台電腦的比較
Intel Core i9-9900K CPU @ 3.60GHz
real 0m12.985s
user 0m9.274s
sys 0m3.844s

Intel Core i7-5820K CPU @ 3.30GHz 
real 0m23.195s
user 0m16.537s
sys 0m6.831s

Intel Core i7-3930K CPU @ 3.20GHz
real 0m29.790s
user 0m21.155s
sys 0m8.650s

Intel Xeon CPU E5-2660 @ 2.20GHz
real 0m39.462s
user 0m30.595s
sys 0m12.536s


其中 i9-9900K 內建 UHD Graphics 630 IGP。另外,我手邊有 2013 年 8 月左右購買的  GeForce GTX 650 Ti (GK106 core) 和 GeForce GTX 650,然後 2018 年 12 月新買的 ASUS 出的 Nvidia GT 710 (2GB) 的卡。要來決定那個顯卡配那一台機器較為適合。


顯卡測試
__GL_SYNC_TO_VBLANK=0 glxgears

650: i7-5820K: 8000 => i9-9900K 6300 FPS
650TI i7-5820K: 8100 => i9-9900K 6494
i9-9900K 內建 4680 FPS

GT710: i7: 6400, i9: 5350

顯卡 i7-5280K 系統 i9-9900K 系統 i9-3930K 系統 E5-2660 系統
GTX 650 8,000 FPS 6,300 FPS 6,900 FPS 未測
GTX 650Ti 8,100 FPS 6,599 FPS 未測 未測
GT 710 6,400 FPS 5,350 FPS 無法開機 5,300 FPS
內建顯卡 4680 FPS
2021-02-15 補測,i9-9900K+GTX 1060,16,295 FPS

GTX 605Ti 在 i7-3930K 上,大約 7,000 FPS。綜合起來,同一顯示卡,在 CPU 越快的系統上,顯卡的 FPS 越低,真是奇怪的現象。

GV-N650OC-1GI: 長14.5CM, GTX650TI-PH-1GD5 長 19CM,會和其他零件或走線干涉太多,還是用技嘉的較短的板子吧,機殼內比較清爽。

使用 i9 內建顯卡,在 Vmware VM 啟動時,會出現下列警告,所以還是使用 Nvidia 的顯卡吧,雖然好像也快不了多少。
Hardware graphics acceleration is not available.
No 3D support is available from the host.

最後,內建顯卡還是沒用上。

i7-3930K (coretemp, it87)
 ~ $ sensors
coretemp-isa-0000
Adapter: ISA adapter
Package id 0:  +44.0°C  (high = +81.0°C, crit = +91.0°C)
Core 0:        +44.0°C  (high = +81.0°C, crit = +91.0°C)
Core 1:        +39.0°C  (high = +81.0°C, crit = +91.0°C)
Core 2:        +38.0°C  (high = +81.0°C, crit = +91.0°C)
Core 3:        +34.0°C  (high = +81.0°C, crit = +91.0°C)
Core 4:        +36.0°C  (high = +81.0°C, crit = +91.0°C)
Core 5:        +34.0°C  (high = +81.0°C, crit = +91.0°C)

it8728-isa-0a30
Adapter: ISA adapter
in0:          +0.84 V  (min =  +0.00 V, max =  +3.06 V)
in1:          +1.50 V  (min =  +0.00 V, max =  +3.06 V)
in2:          +1.97 V  (min =  +0.00 V, max =  +3.06 V)
in3:          +2.03 V  (min =  +0.00 V, max =  +3.06 V)
in4:          +0.89 V  (min =  +0.00 V, max =  +3.06 V)
in5:          +1.06 V  (min =  +0.00 V, max =  +3.06 V)
in6:          +1.50 V  (min =  +0.00 V, max =  +3.06 V)
3VSB:         +3.36 V  (min =  +0.00 V, max =  +6.12 V)
Vbat:         +3.22 V
CPU fan1:        2027 RPM  (min =    0 RPM)
機殼 fan3:        1198 RPM  (min =    0 RPM)
temp1:        +30.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = thermistor
temp2:        +41.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = thermistor
temp3:        +30.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = Intel PECI
intrusion0:  ALARM

2018年12月5日 星期三

CentOS 6 下,安裝 Intel I219-V 網卡及 Nvidia 顯卡的 driver

CentOS 6 EOL (End of Life) 

2020年之後,CentOS 6 已完全死亡,以下的說明可能完全不再適用,留著當紀念,必要時可以回來參考。


-----------------------------------------------

應友人求助,幫忙在 CentOS 6 下,安裝 Intel I219-V 網卡的 driver。

硬體購買於 2018年 11月,規格太新,OS 要跑的軟體,只支援舊的 CentOS 6,無法驅動網卡。

硬體資訊

硬體的主要資訊如下
Motherboard
       型號: PRIME Z390-A
       供應商: ASUSTeK COMPUTER INC.

M.2 SSD,Non-Volatile memory controller
       型號: SSD Pro 7600p/760p/E 6100p Series
       供應商: Intel Corporation

網卡
       型號: Ethernet Connection (7) I219-V
       供應商: Intel Corporation

顯卡
       型號: GP108 [GeForce GT 1030] (rev a1)
       供應商: NVIDIA Corporation

因為無法啟動網路,使用 Gentoo 的安裝系統,再用 chroot 來安裝驅動程式。自從改用 docker 後,有一陣子沒碰 CentOS 了,安裝過程還真有點不順。

原先裝 CentOS 6.9,升級後,變成 6.10,就無法登入。只好重裝 6.10,但別人的電腦都可以用 USB DISK 安裝,這一台竟然就是無法用 USB DISK 安裝,甚至外接光碟機都不行。只好搬出古董 USB 燒錄器,燒一片 DVD RW 才能正常安裝。好在手邊還有燒錄器和 DVD RW,而且還有粗粗的迴紋針,因為它的光碟機竟然無法退出。

裝好後,用 Gentoo 的安裝 USB 開機,再 mount 裝好的 CentOS 系統
livecd ~ # /etc/init.d/lvm start
 * /run/lvm: creating directory
 * Starting lvmetad ...                                         [ ok ]
livecd ~ # vgchange -ay
  3 logical volume(s) in volume group "vg_ntu" now active
livecd ~ # mkdir /mnt/sysimage
livecd ~ # ls /dev/vg_ntu*
lv_home  lv_root  lv_swap
livecd ~ # mount /dev/vg_ntu/lv_root  /mnt/sysimage
livecd ~ # mount /dev/nvme0n1p1 /mnt/sysimage/boot
livecd ~ # mount --bind /proc /mnt/sysimage/proc
livecd ~ # mount --bind /dev /mnt/sysimage/dev
livecd ~ # mount --bind /sys /mnt/sysimage/sys
livecd ~ # chroot /mnt/sysimage
[root@livecd /]# source /etc/profile
[root@livecd /]# export PS1="(chroot) ${PS1}"
(chroot) [root@livecd /]# 

要記後修改 /etc/resolv.conf,才能順利上網。

試了幾次,可能因為使用的 kernel 版本不同,透過 chroot 執行 yum update,好像會讓系統怪怪的。
所以,為了安裝 driver,不要執行 update,只要安裝 gcc 就好,再裝和使用的 kernel 相同版本的 kernel header,指令如下
(chroot) [root@livecd /]# cat /etc/redhat-release 
CentOS release 6.9 (Final)
(chroot) [root@livecd /]# yum install gcc
(chroot) [root@livecd /]# yum install "kernel-devel-uname-r == 2.6.32-754.el6.x86_64"

假若是運作的 OS,可以直接用 yum install "kernel-devel-uname-r == $(uname -r)"

可以列出 /boot 下的檔案,確認 kernel 的版。如 kernel-devel-2.6.32-696.el6.x86_64,就無法直接安裝了。要先下載再安裝,參考後面的顯卡安裝步驟。

到 Intel 官網下載最新的完整驅動程式,抓出 Linux 的部分, e1000e-3.4.2.1.tar.gz。解壓縮後,到 e1000e-3.4.2.1/src/ 目錄下。重新開機後,執行
make install

因為它的 Makefile 會透過 uname -r 取後 kernel 的版本,但在 chroot 下,會取得錯誤資訊,所以要修改 Makefile,直接寫死 kernel 的版本。

網卡的 driver 是 e1000e,裝好後,應該就能啟動網路了。設好網路後,可以安心做其他的事,如 yum update。假如有更新 kernel,要記後重新安裝網卡的 driver。

安裝 Nvidia 的 driver

安裝所需的 gcc 及 kernel-devel
yum install gcc
yum install "kernel-devel-uname-r == $(uname -r)"


有可能版本太舊,無法直接用 yum安裝,只好用 google 搜尋下載 kernel-devel-2.6.32-696.el6.x86_64.rpm,再用 yum 安裝。
wget http://ftp.scientificlinux.org/linux/scientific/6.6/x86_64/updates/security/kernel-devel-2.6.32-696.el6.x86_64.rpm
yum install kernel-devel-2.6.32-696.el6.x86_64.rpm

修改 /etc/inittab,讓 boot 進入 text mode。

預設會載入 open source 的 nouveau 驅動程式,必須修改 /etc/modprobe.d/blacklist.conf,加入
blacklist nouveau

先用指令 uname -r 確定 kernel 的版本。
然後執行下列指令,重新產生沒有包含 nouveau 的 initramfs,然後開機
mv initramfs-2.6.32-696.el6.x86_64.img initramfs-2.6.32-696.el6.x86_64.img.bak
dracut -v /boot/initramfs-2.6.32-696.el6.x86_64.img
開機後,下指令 init 3,關掉 X window。
然後下載 nvidia 的安裝程式,如 NVIDIA-Linux-x86_64-410.78.run,再執行下列指令安裝。
** 記住,要執行 nvidia-xconfig utility,產生設定檔,圖形界面才能開得起來。
chmod +x NVIDIA-Linux-x86_64-410.78.run
./NVIDIA-Linux-x86_64-410.78.run
執行後的訊息
Installation of the NVIDIA Accelerated Graphics Driver for Linux-x86_64      
  (version: 410.78) is now complete.  Please update your XF86Config or         
  xorg.conf file as appropriate; see the file
  /usr/share/doc/NVIDIA_GLX-1.0/README.txt for details.


shutdown時,會出現錯誤的修復
[root@livecd ~]# shutdown -r now
shutdown: error while loading shared libraries: libgcc_s.so.1: cannot open shared object file: No such file or directory
[root@livecd ~]# yum install libgcc_s.so.1


安裝 TeamViewer

另外,在其上安裝 TeamViewer。目前最新的 v14 不能裝,下載 v12 ,可以順利安裝。安裝指令如下,會自動安裝相關的套件
yum install teamviewer_v12.0.90041.i686.rpm

嗯,要是我自己使用的系統,我會裝較新的 OS,然後用 VM 跑舊的 OS。不過,這不干我的事了,我只是好玩,藉此練功一下。還不錯,花了一天的功夫搞定,學會怎麼在 kernel 加上 driver。

** 註記 **
TeamViewer 13 linux builds with recent QT version
Actually, TeamViewer is linked against Qt 5.2 currently.
選擇 v12,應該是要安裝 Qt 太麻煩,會把系統搞得一團亂,還是不要自找麻煩為宜吧。


2018年10月18日 星期四

asp.net menu control 在 Chrome 不正常顯示

asp.net menu control not rending correctly in safari (Chrome 亦同)
https://stackoverflow.com/questions/277197/asp-net-menu-control-not-rending-correctly-in-safari

 使用 ASP.NET 的 web-page 開發模式,所寫的下拉式功能選單,正常運作應如下圖。



這在最早 IE 8 出來時,就會發生選單變成一片空的情形,解決辦法是,開啟它的相容性檢視。這真的是很可笑的一件事,一般所理解的相容性,是針對別家的產品,只有微軟才跟自家產品相容,絕不可能和別人相容。所以,使用 Chrome 或 Firefox 當然也不會是正常的。

這個的解決辦法,比較簡單。只要加上 CSS,即可不用開啟相容性檢視。因為依據新的標準所開發的網頁,在相容性檢視下,根本是個災難啊。修正的 CSS 如下
------------------------------------
<style type ="text/css" >
.IE8Fix {
           /* z-index: 1000; */
position:relative; 
z-index:auto;
        }
</style>

<asp:Menu ID="Menu1" runat="server" BackColor="White" BorderColor="#404040" BorderStyle="Double"
                        BorderWidth="1px" ForeColor="Black" Orientation="Horizontal" DynamicHorizontalOffset="1"
                        DynamicMenuStyle-CssClass="IE8Fix">
                        <Items>
                            <asp:MenuItem NavigateUrl="~/WebMessage.aspx" Text="訊息公告" Value="訊息公告"></asp:MenuItem>
----------------------------

然後,還有更為詭異的情形發生,相同的程式,放在不同的 server,然後用同一 Chrome 瀏覽器開啟,一個正常,另一個不正常,如下圖。然後,Firefox 卻都同樣正常。真是徵軟的品質,一流可靠啊。



經過交叉比對,發現不正常的問題所在是,有雨個 resource 的 javascript 沒有送出。如下圖的第3, 4 筆資料。


這雨個 URL 大概長的像這樣 https://gra206.aca.ntu.edu.tw/ntuweb/WebResource.axd?d=yd3pzel2CBzpd4_iRf8lp4jYXHFvMItjSP_mFAUgHDN2Xt-sDhIN1QcV6aA54vkDhshCSa-3UvCesVfgCrqBNUgr5io1&t=634964077412225000。只是,要不要送出這兩個檔,開發者無從決定,完全視系統高興與否。

就加上 'missing resource javascript'  來 Google 一下,還真找到解決辦法。如前述網址所載。還真是詭異的解決辦法,參考網頁是針對 Safari,就把它改成 chrome 就好。
----------------------------
If Request.ServerVariables("http_user_agent").IndexOf("Chrome", StringComparison.CurrentCultureIgnoreCase) <> -1 Or Request.UserAgent.Contains("AppleWebKit") Then
        Request.Browser.Adapters.Clear()
        Page.ClientTarget = "uplevel"
End If
----------------------------

微軟的一貫政策是,過期產品一概不支援,也沒有詳細資料可供參考,能否解決全靠運氣。我只是想讓它正常運作,再拖一陣子,儘快把程式轉成 PHP。

2018年10月5日 星期五

大同電鍋修理

民國 93年 (應該是民國吧,大同好像不怎麼先進的感覺) 出廠的電鍋,型號 TAC-11KSD,代表是11人份的電鍋,耗電量 800W,容量 1.98L。

要拆開修理,很簡單,只要拆一顆螺絲,另兩個是卡筍。
在拆之前,準備一個強力磁鐵,像是從硬碟拆下的那種超強吸力磁鐵,可以吸住拆下的螺絲,這樣才不會弄掉螺絲。



拆開後,內部看起來很簡潔。但也很結構化和模組,很好修理,不像是台灣 (或者是華人) 能設計出來的。Google 了一下,才知道原來是和東芝(Toshiba)技術合作,而東芝是歷史上第一個將電鍋成功商業化的廠商。


主要構件有三部分,具有彈跳開關的恆溫板組,電熱片 (或稱加熱片),銀接點 (包括上下的銀接點)。圖中的直尺,用來當作購買電熱片的比例的參考。

易損壞的構件為加熱片和接點。發熱元件,就像燈泡的燈絲,有使用壽命。

接點也容易損壞,每開關一次,都會有火花,損蝕接點。有時,按下開關燈不亮,多按幾次又會亮。直到最後,有一天怎麼按都不再亮。假如電熱片是好的,只是接點變黑接觸不良,救急方式,可以拆下上面的銀接點,用刀片或砂紙,把接點清乾淨,又可以撐一陣子。究竟的解決方式,還是上網買個接點來換。

下圖是上面的銀接點,可以看到左端的接點,已被燒得漆黑,不導電了。


下圖為壓板的近照,上有 TAC-8031-A 的編號。



最近電鍋有點怪怪的,按下開關,不通電,燈不亮,上網買了一些零件。左圖是加熱片,這次沒換,當備用。右圖中,黑色直的是上銀接點,黃銅色的下接點。


左邊的相片是上銀接點拆下後,下接點的相片。右邊的相片是拆下的下接點的相片,包括絕緣的墊圈和墊片。要拆下接點,必須用到六角板手,而且有點不太順手,要有點耐心。拆之前,把4顆彈跳開關的螺絲拆下,彈跳開關拿起來,會比較好拆裝。
  

用久了,開關接觸不良,有時開關按下,加熱燈不亮。多按幾次,也許會通電。直到最後,完全不通電。開關換掉後,百分之百通電,真是太棒了。上下接點,網路賣一組100元,算蠻划算的。







2018年9月5日 星期三

建立 ESXi 的安裝 USB 磁碟

首先,依照官方說明,建立步驟如下

-----------------------------------------------------
mkfs.vfat -F 32 -n USB /dev/sde1

syslinux /dev/sde1
cat /usr/share/syslinux/mbr.bin > /dev/sde

mount /dev/sde1 /mnt/usbdisk
mount -o loop VMware-VMvisor-Installer-5.5.update.3b-201512001-3248547.x86_64.iso /mnt/cdrom

cp -r /mnt/cdrom/* /mnt/usbdisk
mv /mnt/usbdisk/isolinux.cfg /mnt/usbdisk/syslinux.cfg

vi /mnt/usbdisk/syslinux.cfg
change the line APPEND -c boot.cfg to APPEND -c boot.cfg -p 1
umount /mnt/usbdisk
-----------------------------------------------------

很不幸的,開機後,出現 "Failed to load COM32 file menu.c32" 的錯誤訊息。依照網路找到的說明,再從自己的電腦系統中,copy 一些檔案過去,如下
-----------------------------------------------------
cp /usr/share/syslinux/libcom32.c32 /mnt/usbdisk/
cp /usr/share/syslinux/mboot.c32 /mnt/usbdisk/
cp /usr/share/syslinux/menu.c32 /mnt/usbdisk/
cp /usr/share/syslinux/libutil.c32 /mnt/usbdisk/
-----------------------------------------------------

開機後,可以看到選單,但是出現無法載入的錯誤。

在網路上找到,有人把 syslinux 降到舊版本,就成功了。所以將自己電腦的 syslinux 降到 3.86,還是不成功。

最後放棄,照 Youtube 找到的教學,改用 Universal USB Installer,選擇 "Try Unlisted Linux ISO",一次就成功。終於看到正常開機後的畫面了,接下來,就不用在座位和機房間跑來跑去,可以坐在位子上做接下來的工作,這就是使用 VM 的好處啊。


2018年9月4日 星期二

避免使用 Vue.js 的 DOM Templates

參考 Why You Should Avoid Vue.js DOM Templates

最近才開始學習使用 Vue,剛看到這篇文章,不懂它在說什麼,只知道在 Html 的 table 中,會將非 table 的內容,上移到 table 上方。在學習了 component 之後,終於理解它在說什麼了。

在 component 中,有幾種方式定義 template。最方便的,應該是使用 backtick (`) 來定義多行字串,不過,IE 10 不支援。我們無法強制要求使用者完全不用 IE 10,也不想辛苦的用 Javascript 的 string,因此只能選擇使用 x-template 或 DOM template。

其實,DOM template 也不是好選擇,因為在 IE 10 是不正常的,最後,只剩 x-template。關於不用 DOM template 的原因,一些測試和說明如下。

測試程式碼,如下

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Vue.js Template Test</title>
</head>
<body>
<div id="app">
    <template-test1></template-test1>
    <template-test2></template-test2>
</div>

<script type="text/javascript" src="vue_2.5.16.js"></script>

<script type="text/x-template" id="template-test1">
    <div>
        <h3>使用 x-template</h3>
        <table border="1">
            <component-test-sub
                    v-for="ri in 5"
                    v-bind:key="ri"
                    v-bind:ri="ri"
            />
        </table>
    </div>
</script>

<script>
    Vue.component('template-test1', {
        template: '#template-test1'
    });
</script>

<!-- Template 在瀏覽器應該不會顯示,但在 IE 10 會顯示 <h3> 的 title -->
<template id="template-test2">
    <div>
        <h3>使用 DOM template</h3>
        <table border="1">
            <tr is="component-test-sub"
                v-for="ri in 5"
                v-bind:key="ri"
                v-bind:ri="ri"
            ></tr>
        </table>
    </div>
</template>

<script>
    Vue.component('template-test2', {
        template: '#template-test2'
    });
</script>

<script type="text/x-template" id="test-sub-template">
    <tr>
        <td>Row {{ ri }}</td>
    </tr>
</script>

<script type="text/javascript">
    Vue.component('componentTestSub', {
        template: '#test-sub-template',
        props: {
            ri: Number  // row index
        }
    });

    new Vue({
        el: '#app'
    });
</script>
</body>
</html>



說明

使用 x-template,其 childNodes 只有一個,就是其中的全部內容。而使用 DOM template 時,瀏覽器會解析其內容,建立 DOM tree。

因此,使用 DOM template 時,在 <table></table> 中,不能直接使用 <component-test-sub />,也不允許 self closing。

2018年9月1日 星期六

使用 distcc 進行遠端編譯

在舊筆電上安裝 Gentoo,要更新 package 時,真是一段漫長的等待。身邊就擺著效能超強的桌機或伺服器,卻幫不上忙。若能把 compile 的任務丟給遠端的效能強大的電腦,在筆電上更新 package 將上一件多棒的事啊。這個想法確實可行,而且,看來已是很成熟的作法了,只是我到現在才知道。因為要請長假,把塵封的筆電拿出來,已有一年沒更新,連 make.profile 都已改變。若要更新,必然是要花個幾天幾夜才能完成,只好確定能開機,連回伺服器,就等回來上班後再處理了。

首先的要求是 gcc 的版本要一致,Gentoo 的穩定版是 gcc 7.3.0,而筆電還是 gcc  4.9.4。在 emerge --sync 同步 portage 後,大約 13:30 開始更新 gcc,約 15:30 完成,花了 2 個鐘頭的時間。

安裝和服務設定

安裝,很簡單
# emerge -av sys-devel/distcc

服務設定,修改 /etc/systemd/system/distccd.service.d/00gentoo.conf
Environment="ALLOWED_SERVERS=10.161.80.1/20"

雖然叫 ALLOWED_SERVERS,但也指 client 端,照做就對了。然後啟動服務
# systemctl daemon-reload
# systemctl start distccd

只是暫時使用,所以沒有 enable 此服務。

測試

# cat main.c
--------------------------------------------
#include <stdio.h>

int main() {
    printf("Hello distcc!\n");
    return 0;
}
--------------------------------------------
# /usr/bin/distcc-config --set-hosts 10.161.81.162
# export DISTCC_VERBOSE=1
# distcc gcc -c main.c -o main.o
# gcc main.o -o main
# ./main
Hello distcc!

筆電的安裝

年久失修,只好按照 "To bootstrap" 的說明來做。
USE='-*' PYTHON_TARGETS="python2_7" emerge --nodeps sys-devel/distcc

export PATH="/usr/lib/distcc/bin:${PATH}"
/usr/bin/distcc-config --set-hosts 10.161.81.162

使用 pump mode,速度會加快很多,
/usr/bin/distcc-config --set-hosts "10.161.81.162/20,cpp,lzo"

鈄線後面的數字 (即 '/20'),是可以接受的最大 job 數,預設是 4。跑 distccd 的 server 是雙 CPU,各 8 core,共 32 thread,平時沒在用,就設到 20 job,給它盡情的操吧。

修改 /etc/portage/make.conf,其中 j 的選項為 total (local + remote) CPU cores,l 的選項為  local CPU cores。
FEATURES="distcc distcc-pump"
MAKEOPTS="-j20 -l2"

升級 gcc,一次要跳過中間的版本,不曉得會怎樣。不管了,玩玩看,不成功的話,頂多從頭裝起。
# gcc-config --list-profiles
 [1] x86_64-pc-linux-gnu-4.9.4 *
 [2] x86_64-pc-linux-gnu-5.4.0
 [3] x86_64-pc-linux-gnu-7.3.0

# gcc-config 3
# source /etc/profile

# emerge --ask --oneshot --usepkg=n sys-devel/libtool sys-apps/sandbox

接下來,就只好慢慢的,一個一個 package 依次升級了。

emerge 失敗的問題

有時,會發生像下面錯誤訊息而安裝失敗,例如 kde-frameworks/kpty,將 distcc 取消就成功了。
fatal error: sys/filio.h: No such file or directory
 #include <sys/filio.h>

所以,碰到 emerge 失敗時,就試著將 distcc 取消,也許問題就解決了。

最後,實在太慢了,而且,太多的失敗與錯誤,乾脆拔硬碟,用 PC 來更新。原來折騰了一個週末,都搞不定,裝到 PC 上更新,一天就跑完了。

也許,原來的版本太舊了,隔了一年多才更新,有很多 package 都是被 mask 掉的。使用 distcc 時,發生很多衝突的狀況,都直接用 --nodeps 的選項來裝,造成程式潛伏的問題。

結尾

我現在的筆電是 ThinkPad X201,原本有點動心想再買一台 X230,但是一年都用不上,實在沒必要多花這一萬元啊。雖然,沒有完全使用 distcc 的作法,來完成更新。但 distcc 可以在往後更新用上,這筆電也能再用上好幾年,即使是在上面跑 Gentoo。


網誌存檔