2020-06-02

Fedora Linux 上使用 ddclient 更新動態 DNS

我想在 Linux 上使用 no-ip 的動態 DNS 服務,但我一直無法使用官方的 DUC,之後發現 ddclient 這支軟體可以更新許多免費動態 DNS 的服務,於是試著用 ddclient 來更新 no-ip。

安裝 ddclient

sudo dnf install ddclient

修改 /etc/ddclient.conf

ddclient.conf 裡已經準備好許多動態 DNS 服務所需的設定,但沒有給 no-ip 用的,所以請自行加入以下這段
## No-IP
protocol=noip
use=web, web=checkip.dyndns.com/
server=dynupdate.no-ip.com
login=no-ip 的帳號
password='no-ip 的密碼' 
no-ip.domain   # 在 no-ip 申請的域名

執行 ddclient

sudo ddclient

可以登入 no-ip 的網站,去看看所設定的域名 IP 有沒有更新,可能不會馬上更新要等一下。

參考網頁:
  1. 使用 ddclient 更新 No-IP

Linux 上移除 No-IP 的 Dynamic DNS Update Client

no-ip 是個提供動態 DNS 服務的網站,在 Windows 環境下可以安裝它的 Dynamic DNS Update Client(DUC) for Windows 來更新域名對應的 IP。no-ip 也有提供 Linux 下的 Dynamic DNS Update Client,目前是 2.1.9 ,也有安裝及使用的教學

照著官方的教學安裝時,遇到「make: not founded」的訊息,在 Fedora Linux 下使用以下的指令就能安裝 make
sudo dnf group install "Development Tools"
之後照著官方教學即可。

問題來了,官方的 DUC 不能使用,所以我想將它移除,找了一下終於知道要怎麼移除了,先在 no-ip.2.1.9-1/Makefile 最後面加上以下這段
uninstall: ${TGT}
        rm ${BINDIR}/${TGT}
        rm ${CONFDIR}/no-ip2.conf
要注意 rm 前的空白是 Tab 造成的不是空格,如果使用空格會有錯誤。

之後 cd/usr/local/src/no-ip.2.1.9-1/ 執行
sudo make uninstall
sudo remove
就能移除 DUC 了。

參考網頁:
  1. How to Install the Dynamic Update Client on Linux
  2. How to uninstall noip-duc

Linux 自動網路校時

在 Hyper-V 虛擬機器上設定了 crontab 卻不會執行,後來發現不是 cron 的問題,而是虛擬機器的時鐘變慢了,導致 cron 不會按時執行。我的解決方法是利用網路校時,並且排進 crontab 每 30 分鐘就校時一次。

網路校時的指令是
sudo ntpdate time.stdtime.gov.tw
選用的 NTP 伺服器是 time.stdtime.gov.tw。接著將正確時間寫入硬體時鐘
sudo hwclock -w

利用 crontab 定期校時
*/30 * * * * root (/usr/sbin/ntpdate time.stdtime.gov.tw && /sbin/hwclock -w) &> /dev/null

原先我是設定每 6 小時校時一次,沒想到過了一晚再看虛擬機器裡的時鐘竟然慢了 12 小時,只好改成每 30 分鐘就校時一次,希望能有所改善。

在查資料的時候,才發現原來 Hyper-V 本身就有讓 VM 與 Host 對時的服務,但我不知道為什麼我的電腦上沒有作用。可能是因為語系的關係,查詢有開啟「時間同步化」服務的 VM 的 powershell script 要改成如下:
Get-VMIntegrationService -VMName * | Where {$_.Name -eq '時間同步化'} | Select-Object VMName, Name, Enabled


參考網址:
  1. Linux 設定 crontab 例行性工作排程教學與範例
  2. Linux 設定 NTP 同步系統時間,自動網路校時教學
  3. How To Fix Hyper-V Clock Skew Issues

2020-05-29

Linux 掛載 Windows 的網路芳鄰

Linux 要使用 Windows 分享出來的網路芳鄰的時候,需要將該共用的資料夾掛載到 Linux 上,利用
 
sudo mount -t cifs //xxx.xxx.xxx.xxx/share_folder /Linux/mount_point -o username=USER_NAME,password=PASSWORD
可以直接將 Windows 的共用資料夾掛載起來。也可以寫在 /etc/fstab 裡,一開機就自動掛載,但如果 Windows 當機或故障了,在 Linux 才可能產生連帶問題,可以透過 autofs 套件可以在用到網路芳鄰的時候,自動掛載資源到指定的資料夾,比直接寫在 /etc/fstab 裡還好。

我的 Host OS 是 WINDOWS,利用 Hyper-V 建立以 Fedora Linux 32 為 Guest OS 的虛擬機器,如果使用其他 Distro. 只有在安裝套件時會稍稍不同,設定檔的寫法則是一樣的。

  1. 安裝 autofs 和 cifs.utils套件
  2. sudo dnf install autofs cifs.utils
    
  3. 建立認證用的帳號密碼文件,我放在 /home/User_Name/.secret.txt,中間不能有空白
  4. # /home/User_Name/.secret.txt
    username=USER_NAME_in_WINDOWS
    password=PASSWORD_of_USER
    
    將 .secret.txt 的權限改成 600(rw-------)
    chmod 600 /home/User_Name/.secret.txt
    
  5. 先在 /etc/auto.master 新增一筆紀錄如下,表示要將設定檔 /etc/auto.myneighborhood (待建立)中設定的網路芳鄰資源掛載到 /mount_point,而 /mount_point 必須已存在。
  6. # /etc/auto.master
    /mount_point    /etc/auto.myneighborhood
    
  7. 接著新增 /etc/auto.myneighborhood
  8. # /etc/auto.myneighborhood
    folder_name -fstype=cifs,rw,noperm,credentials=/home/User_Name/.secret.txt,uid=User_Name,gid=User_Group,nobrl    ://xxx.xxx.xxx.xxx/share_folder
    
    credentials 後面接認證用的帳號密碼文件,避免直接將帳號、密碼寫在設定檔裡;nobrl 選項可以避免 SQLite 資料庫被鎖起來。
  9. 重新啟動 autofs 服務
  10. sudo systemctl stop autofs.service
    sudo systemctl start autofs.service
    
  11. 「使用」 /home/User_Name/mount_point/folder_name,例如進入 folder_name。
  12. cd /home/User_Name/mount_point/folder_name
    
    當「使用」到 folder_name 時 autofs 才會自動掛載,剛開始不知道,想說為什麼 start autofs.service 以後,ls -l /home/User_Name/mount_point 看不到內容,後來才知道要真的進到該目錄才會真正掛載。
  13. 參考資料:
    1. How to mount remote Windows shares
    2. Samba Client CentOS 使用 Windows 網芳磁碟設定
    3. Linux systemd 系統服務管理基礎教學與範例
    4. 將sqlite放在windows-share上跨平台使用 (提到的 nobrl 參數解決了 SQLite 資料庫被鎖的問題)

2020-04-27

從 XBRL 建立屬於自己的財報資料庫

若是要了解一家公司的財務狀況,一定要閱讀財務報表,傳統 PDF 格式的財務報表不利於電腦整理、比較公司的各種財務數據,而 XBRL(eXtensible Business Reporting Language,可延伸商業報導語言)是以 XML 為基礎做為一種財務報表的表達方式,有益於分析公司的財務報表。

在閱讀財務報表相關書籍時,我就在想怎麼從上千家的公司裡篩選出具優益財務的公司,顯然要透過資料庫整理好各項數據,才能藉由電腦快速篩選。像是財報狗Goodinfo!台灣股市資訊網優分析等網站都能篩選出符合某些財務指標的公司,缺點就是有時想用的指標是沒有提供的,如果能自己寫想要的指標,就能更自由的尋找潛力股。

公開資訊觀測站就能下載以 XBRL 格式製作的財務報表,但網路上關於利用 XBRL 製作財務資料庫的資訊卻很少,所以我打算慢慢找資料,慢慢建立自己的資料庫。

以下是我目前找到相關的網站,其中幫助最大的是周國華老師的XBRL網站和貓囧丸,周國華老師對於XBRL的介紹很詳細,對於我建立 XBRL 概念很有用,而貓囧丸則是在程式設計上讓我受益不少,尤其是他寫在程式碼中的註解,不止讓我更了解程式也更了解 XBRL。

公開資訊觀測站也將每一季的財務報表打包成一個檔,而從 2019 年第 1 季開始加進了 iXBRL 格式,使得線上閱讀財務報表更方便,以台積電2018年第4季合併財務報表台積電2019年第1季合併財務報告為例就可以看出差別。

之後再慢慢將 XBRL 的筆記寫下來,也訓練我對於 Python 語言的使用,尤其在爬取股價資訊、券商進出明細方面,搭配起來也許更有助於投資。

2020-04-07

Hyper-V 搬移硬碟

使用 Hyper-V 建立虛擬機器後,如果想要複製機器可以使用匯出/匯入的方式,匯出/匯入亦可透過 Power Shell 操作,或者想先建立一個 Base machine,之後利用 Base machine 快速建立其他機器時,亦可利用匯出/匯入的功能。

匯入的類型選擇第三種「複製虛擬機器(建立新的唯一識別碼)」,存放虛擬機器的資料夾必須和原來的不同。匯出時會連同檢查點一起匯出,不是單純的把虛擬硬碟匯出。




兩個需求


  • Base 和其他後來建立機器的映像檔放在同一個資料夾
  • Base 映像檔已經合併了所有的檢查點( 快照,Snapshot)
匯入 base 的機器時,虛擬機器的硬碟(vhdx 檔)檔名仍和原來的一樣,因此必須指定另一個資料夾,不符合我第 1 個需求。在匯入時如果之前做過快照,會連同檢查點的檔案一起匯入,而 Hyper-V 的檢查點是種差異磁碟,如果將最早的 vhdx 檔改名直接複製,則中間做過的系統更新就會消失。

那要如何同時滿足這兩個需求呢?後來在 [如何手動還原 Hyper-V 的 VM 與 Snapshots 到另一台主機] 找到將 Snapshot 合併回父 vhdx 的方法,同時又可以指定新檔名的方法,這樣就能直接建立一台新的虛擬機器,並指定 vhdx 檔做為硬碟。


合併 Snapshot 並指定新檔名

  1. 選取編輯磁碟便會啟動編輯磁碟精靈
  2. 選取最新的 avhdx 檔,或是想要合併的檢查點
  3. 選擇合併
  4. 合併至新的虛擬硬碟並指定檔名
  5. 建立新的虛擬機器,並連接新的虛擬硬碟
  6. 在虛擬機器列表中便可看到新舊機器


CentOS 啟動網路

我的 Base 是 CentOS 8,在建立新虛擬機器後,遇到沒有網路的問題,以下是啟動網路的方法。
  1. 用 ifconfig 指令查看網路,如果沒有就先看一下 /sbin/ 底下有沒有 ifconfig,再沒有就安裝 net-tools
     
    # 安裝 net-tools
    sudo dnf install net-tools
    
  2. 啟動網路,我的是 eth0,就輸入以下指令
     
    sudo ifup eth0
  3. 如果希望開機便自動啟動網路,修改檔案 /etc/sysconfig/network-scripts/ifcfg-eth0,將 ONBOOT=no 改為ONBOOT=yes


利用差異磁碟可節省實際硬碟空間

將父磁碟設為唯讀,新增子磁碟為「差異磁碟」,在建立新虛擬機器時連接至子磁碟,這樣可以節省硬碟空間,不過一旦虛擬機器太多時,父磁碟將成為效能瓶頸。

參考網頁


  1. Day-12 Hyper-V 3.0實戰之-另一種備份的方式(匯出匯入虛擬機器)
  2. [Hyper-V]如何在Hyper-V 3.0上進行虛擬主機的複製
  3. 如何手動還原 Hyper-V 的 VM 與 Snapshots 到另一台主機
  4. Linux CentOS Network unreachable 處理解決方式
  5. [HyperV] 差異磁碟

2020-03-29

解決總是出現「請輸入解鎖登入鑰匙圈的密碼」提示訊息的困擾

使用 Chromium 時,每次都會出現「請輸入解鎖登入鑰匙圈的密碼」的提示訊窗,透過 Google 查詢後,得到的總是 Ubuntu Linux 系統上的解決方法,首先要開啟「密碼及加密金鑰」這個程式,但在 Manjaro Linux 上就是找不到,在 Pacman 中搜尋關鍵字「password」也沒有。

Seahorse 就是「密碼及加密金鑰」

從英文網頁中知道要安裝 Seahorse 這個程式,但它的名字實在和密碼不相關,於是遲遲不敢安裝,最近大著膽子給它裝下去了,發現原來它就是尋找許久的「密碼及加密金鑰」。

之後就照著 google 到的方法做就好。



參考網頁:
  1. Mint 18 啟動 Chromium 會要求「輸入預設鑰匙圈的密碼」解決方法
  2. Ubuntu如何設定Chrome不彈出輸入密碼對話框

2020-03-23

Manjaro Linux 安裝後的調整

因為硬碟排線故障致使我誤以為硬碟壞掉而買了一顆新的硬碟,在重灌系統的過程時,想說應該要紀錄一下安裝後的調整,以便日後能迅速地設定成自己順手的樣子。


設定 Locale

  1. 查看目前系統使用的 locale
    locale
    
  2. 列出已經安裝生成的語系
    locale -a
    
  3. 切換語系到 zh_TW.UTF-8
    sudo localectl set-locale LANG=zh_TW.UTF-8 
    
  4. 如果想要換的 locale 還沒有生成,先編輯 /etc/locale.gen 取消註解之後,執行以下指令生成
    sudo locale-gen
    

 

 安裝並設定輸入法 fcitx

  1. 安裝 fcitx
    sudo pacman -Syu fcitx-gtk2 fcitx-gtk3 fcitx-qt5 fcitx-table-extra fcitx-configtool fcitx-chewing
    
  2. 編輯 ~/.profile 檔,內容如下,可先將舊檔改名留存,之後要重開機
    export QT_IM_MODULE=fcitx
    export GTK_IM_MODULE=fcitx
    export XMODIFIERS="@im=fcitx"
    
  3. 新增鍵盤輸入法為嘸蝦米(boshiamy),並進行細部設定
  4. 參考網址: Chakra Linux 安裝 Fcitx 中文輸入法教學

 

同步 Linux 與 Windows 的時間認定

  1. Linux 下原本是將 BIOS 時間認定成 UTC+0,要查看原來的設定可以輸入以下指令:
    timedatectl | grep local
    
    會看如下的結果
    RTC in local TZ: no
    
  2. 想讓 Linux 使用本地時間,指令如下:
    sudo timedatectl set-local-rtc 1 --adjust-system-clock 
  3. 設定裡頭的「時間與日期」也可以達到同樣的效果

 

設定右下角時鐘顯示格式

  1. 滑鼠右鍵點擊右下角的時鐘後,選擇「設定組態」
  2. 在「設定組態」裡選擇「使用自訂日期格式」並在「日期格式」欄中輸入
    %Y-%m-%d %n %H:%M:%S
    

 

安裝常用的軟體

  1. Chromium、TeXLive、noto-fonts-cjk、VS Code、Notepad ++、Seahorse
  2. pacman -Syu texlive-bin texlive-core texlive-latexextra texlive-langchinese texlive-science texlive-pictures seahorse