---
# System prepended metadata

title: 計算機系統管理

---

# 計算機系統管理
[csa.cs.nthu.edu.tw](http://csa.cs.nthu.edu.tw)
[Wayback Machine](https://web.archive.org/web/20210117060917/http://csa.cs.nthu.edu.tw/)
## 2020-10-05

### 裝系統
* 選擇 "I will install the operating system later"
* 因為要安裝FreeBSD 12，Guest OS選Other - FreeBSD 12 64bit
* Virtual machine name 就只是識別用，就像電腦上的貼紙
* 如果要在虛擬機開虛擬機，要在Processors選項，勾選Virtualize engine那邊的選項
* Network先選Bridged
* 3D加速目前做得不是很好，建議不開
* 進到虛擬機，按ctrl+alt可以回到桌面
* ctrl+alt+del會被windows攔截，VMware允許以ctrl+alt+ins取代
* .vmx是整台虛擬機的設定檔
* vmxf, vmsd之類的，是bios主機板之類的參數
* VMware如果要序號，自己上網找w
* 開機之後看到的畫面，應該類似BIOS的東西
* 可以在右上角的光碟機設定，把哪一個ISO檔設成光碟給他讀
* 選擇freeBSD，再按ctrl alt ins重開機
* **老師教的是，實際要架一台伺服器，真的要拿來服務的，他會怎麼做**，有需要可以去官網看handbook
* `nslookup`
* kernel-dbg是開發的時候拿來debug的，我們可以不選(用空白鍵)
* lib32是用在相容32bit應用程式的東西，建議裝
* ports
* src建議裝，如果以後要自己編譯使用應用程式，可能會用到kernel的header之類的
* 選Auto(UFS)
* MBR只能訂址48bit，3TB以上的就讀不到
* MBR最多分割7個，BSD最多8個
* GPT至少32個
* 選GPT
* da代表sata，ada代表ide (?)
* da`0`是第一顆硬碟
* da0`p1`是第一個partition
* swap不會有位置，因為他是記憶體
* `alt+F1`, `F2`...可以叫出BSD的virtual console
* pass:`yf01-BSD`
* DHCP 動態IP，如果我們的網路上有配發的server，就會自動向他取得，但IP是有限的，可能會拿不到
* 老師有預留IP，放在點名表
* SLAAC是IPv6特別的東西，類似DHCP，但是由router配發
* IPv6設定的時候，老師配發給每個人的是`2001:288:e001:86::15:XXXX`，後面的XXXX可以自己分配
* DNS的部分，也在簽到表
- 正常來說，DNS應該設成自己的上級
* ntp`d`, power`d`, mouse`d`代表daemon，就是會一直跑起來
* powerd不建議開，因為他會自己調整頻率，一些要計時的程式會壞
* ntpdate, ntpd要勾，不然違法w
* system hardening的部分先不管，這部分是要隱藏資訊
* 之後會要求再建立一個user，為了避免一直使用root
* ^^^沒這樣做也違法w
* BSD裡面，管理者權限的名稱叫做`wheel`，建立這個新user的時候就invite他
* home directory就是一開始登入會進到的地方
* user: `csa`

### CentOS
* Guest OS:  Linux -> CentOS 8 64bit
* 開機之後，如果遇到畫面缺少，可能是硬體的問題，實體機也可能遇到；可以加個參數，用文字的方式安裝
* software selection: minimal install
* user: `csa`
* pass: `yf02-COS`

### 測網路
* ping 自己 `127.0.0.1` / `:1`
* ping gateway `140.114.86.254` / `2001:288:e001:86::1`
* ping DNS `8.8.8.8` `8.8.4.4` / `2001:4860:4860::8888` `2001:4860:4860::8844`
* 如果要用NAT，會變成從分享器後面出去，去網卡設定vmnet8，指定IP就可以了

#### freeBSD
* 查IP `ifconfig`
* `netstat -rn`

#### linux (CentOS)
ip address
ip route
ip -6 route

### UNIX基本操作指令
* 指令前面有一個`#`代表的是需要管理者權限才可以下
* 而`$`則是任何人


### 關於IP
* 虛擬IP = private IP
    * 大多是浮動，但可以設定固定
    * NAT 1:1 多少public就對應多少private IP
    * 即使用的是虛擬IP，能夠上網，一定有NAT存在
    * 現在是IPv4跟v6的過渡期，`::ffff:192.168.0.1`可用來map到IPv4的`192.168.0.1`
* network ID相同，就可以接對接
    * private IP算上mask之後，就得到network ID
    * IPv4 與 IPv6 同理
* IPv6可以用兩個冒號`::`來省略中間的0，

### 其他
* `<>`代表必要參數
* `[]`代表選用參數

### 後記
* `/etc/rc.conf`
* `/etc/resolv.conf`

## 2020/10/12

### 重設IP
* `/etc/rc.conf`
* 修改後要重開機 或者:
    * `ifconfig em0 140.114.86.5 netmask 255.255.255.0`
    * `ifconfig em0 inet6 ~` (不用netmask)
    * 140.114.86.5 的部分改成自己的IP
* netstat -rn
    * -n的部分是不要反查主機名稱
    * 可以發現
    * `route add default 140.114.86.254`
* /etc/resolve.conf

* `arp -a` 可以看到妳所認得的ip跟卡號，限區網
* `netstat -na | more`
    * 如果port 22沒有在listen，代表ssd沒有正常運作；
    * 可以去 /etc/rc.conf 看看 sshd_enable是否有="YES"
    * 注意，如果有多行給值，會依照最後一個來設定，但還是建議清理一下
### 新增USER
* `adduser`
* 使用者群組目前的習慣是，一個使用者自己一個群組，之後有需要跟其他使用者共用一些東西，再設定
* /etc/ssh/sshd_config
    * 可以在這開放以root登入
* freeBSD的密碼檔案是在 /etc/master.passwd
    * 直接用`vi`是不能修改的
    * 要用`vipw`
        * 資料以`:`分隔
        * 裡面會有一個預設的toor使用者(反過來的root)，第一個`:`後面是一個星號`*`
        * 這個星號代表他沒有被啟用
        * 如果要使用這個toor使用者，就要填上加**密過後的密碼**
        * 使用時機是，給別人管理機器，但他不會管，所以就開這個後門
    * 格式:
        * 名稱:密碼:uid:gid:class:密碼修改次數:密碼有效期限:大致資訊:home目錄:用甚麼shell
    * 系上要給每個學生建立使用者，不會像前面那樣互動式的建立，會直接修改這個檔案，再開每個人的home目錄
* 密碼的格式:
    * $`加密方法`$`base64的加鹽`$`加密過後的密碼`
    * 可以用crypt自己做
* 權限格式
    * d rwx rwx rwx
    * 第一個`d`代表目錄，還可能是`l`代表link，類似捷徑
    * 第二個代表對`擁有者`的權限
    * 第三個是`這個群組`的權限
    * 第四個是`其他人`的權限
    * 對`d`的`x`權限，代表能不能進入
    * 如果是一槓`-`代表沒有這個權限，例如`-rwxr--r--`
* 權限更改
    * chmod
    * chgrp
* `pw usermod <user> -G <group>`

### NAT
* NAT本身是一台分享器
* IPv4
* 要把BSD變成一個NAT，他會需要兩個網卡，一個內網，一個外網
* 如果是虛擬機跟虛擬機互聯，建議用LAN segment，稍微會有點跟bridge出去的有關
* 跟著NAT講義做
* 新增/etc/loader.conf填入內容
* 修改/etc/rc.conf
* 重開機
* 可以打 sysctl -a | grep forward 看一下IPv4有沒有forward唯一(IPv6沒差)

### telnet
* 非常不安全

### HOMEWORK
FreeBSD建一個使用者，要可以SSH操作，要可以變成root


## 2020/10/19
* 身為系統管理者，要時常更新，確保安全
* 用 freebsd-update 來更新
	* freebsd-update fetch
	* freebsd-update install
* port-tree: freebsd有團隊會port一些程式過來，例如編輯器、網管軟體...
	* 可以去官網release info.找Ported Applications
	* `portsnap`可以把原始碼下載下來(然後可以自己make-make install，但這樣可能有些dependency沒裝，要自己再到其他資料夾make)
		* fetch先拿回壓縮檔
			* `portsnap fetch`
		* 第一次先extract
			* `portsnap extract`
		* 第二次之後就update就好
			* `portsnap update`
		* 壓縮檔、壓縮後，會放在/usr/ports
		* 安裝joe:
			* 到/usr/ports/editors/joe
	* portmaster: port的管理工具
		* /usr/ports/port/mgmt/portmaster
		* `make`
		* `make install`
* 安裝來源不同
	* port-tree, package系統 安裝的路徑相同
		* freebsd下，port-tree、自己編譯的會放在/usr/local
			* bin放執行檔
			* etc放設定檔
		* 用pkg，從已經編譯好的binary安裝會不同
	* 與自己從Source compile安裝的路徑不同
* `pkg info`可以看安裝了甚麼package
* `top` 監看資源使用，跟windows的工作管理員差不多
	* 第一行　load averages: 後面分別為5, 10, 15分鐘平均X分鐘，有多少程式在等待CPU
	* 按`H`，可以叫出說明
* `kill -s HUP <pid>`
	* -s 是送一個signal
	* HUP就是重新讀設定檔
	* `kill -9 <pid>` 強制程式關閉(程式接不到interrupt，也無法忽略)，但kernel可能還是不給關
* alias
	* ex: `h history 1000`
		* 代表 `h` 這個字代表後面的 `history 1000`
	* 系統設定檔 在 /etc/csh.cshrc
	* 個人設定檔 在 ~/.cshrc
	* 每次登入可以直接打 `alias h history 1000`
		* 但下次就會不見
		* 想要保持設定，就要直接改設定檔
* 設定字元集
	* setenv LC_CTYPE la_LN.ISO_8859-1
		* 拉丁語系
	* zh_TW.ISO_8859-1
		* 台灣中文

* 安裝 apache
	* 可以直接用 pkg search apache看看版本，直接用pkg install apache安裝
		* 不建議:V
	* 建議從source安裝
* 從source安裝apache
	* 去官往找壓縮檔，建議裝.gz，因為支援性較高
	* freebsd自帶`fetch`，用來從網路抓東西
		* 資安意識抬頭，經常遇到憑證不認得；難(無)解
		* 實在太爛，別用w
	* `pkg install wget`把wget裝上再用他下載
	* 得到壓縮檔，可以用`tar`
		* `t` test，不解壓縮，只是先看看有啥 (建議先看看，不然如果壓縮檔裡面就是一堆檔案，解開之後散成一坨就麻煩了)
			* `x` 解壓縮
		* `v` 顯示出來
		* `f` 指定檔案
		* `z` 解gzip格式
			* `j` bz2
			* `J` xz
	* 小知識: 拿到原始碼要安裝，先看README，再看INSTALL，docs，都沒有的話，看./configure --help，再不然看 MAKEFILE
	* 解壓縮後進到資料夾，執行./configure
		* 打./configure --help可以看到，預設裝在/usr/local/apache2
		* 會遇到沒有APR的error
			* apache為了在各種環境下都能執行，用了一些library
			* 這些library不一定每個平台都有(:V)所以再寫成另外的套件
			* apr、apr-util
	* 去找apr，下載，解壓縮，執行./configure
		* 這次預設路徑在/usr/local
		* 執行完會發現多了MAKEFILE
			* 執行make，make install
			* 這次又發現缺少apr-util
			* 一樣去安裝
	* 安裝apr-util
		* 執行 ./configure後，告知找不到APR，並要求以--with-apr提供路徑
		* 看看 ./configure --help，發現
		```
		--with-apr=PATH  prefix for installed APR or the full path to 
							apr-config
		```
		* 剛剛知道裝在/usr/local/，所以去那邊找找apr-config
		* 最後發現只有/usr/local/apr/bin/apr-1-config
		* 就執行./configure --with-apr=/usr/local/apr/bin/apr-1-config
	* 繼續安裝apr
		* make, make install
	* 安裝apache
		* make, make install
	* 都完成之後，去設定/usr/local/apache2/conf/http.conf
		* 注意，把唯一的一行 cgid 註解拿掉
	* 執行 /usr/local/apache2/bin/apachectl restart
		* 會需要修改/etc/rc.conf (吧。看他怎麼說)
		* 有改動上面的設定檔 conf/http.conf 也需要重啟apache

* drill -X <IP>
	* 找domain name
* 

* `sync` 把RAM的東西寫到disk
    * 再做`reboot`
* windows: `nslookup 140.114.86.15`
* pkg install 裝的 apache 
    * 目錄在/usr/local/etc/apache24/
    * bin 在 /usr/local/sbin/apachectl
    * cgi 在 /usr/local/www/apache24/cgi-bin/


## 2020-10-26
### 大版本更新
* freebsd-update upgrade -r 12.2-RELEASE
	* 版本號參考官網
* freebsd-update install
* reboot
* freebsd-update install
* portmaster -a
* freebsd-update install

### syslog

* /etc/syslog.conf
	* 
	* 最下面兩行include，就是也把後面寫的兩個檔案也當作規則塞進來


### DNS
* dig @a.root-servers.net. tw
* .arpa是個用來IP反查域名的網域
* Zone file 領域檔
	* 序號以前會用修改時間+版本來記，但久了以後數字可能會爆掉
* 
* /usr/local/etc/rc.d/named 是BIND的服務
* /usr/local/etc/namedb/namedb.conf (應該)是寫網址對應的IP
* /usr/local/etc/namedb/master/yfs~~~ zone的設定


## 2020-11-02
### SSL
* 憑證
	* 根憑證
		* "自我簽證"的憑證發行者
		* 通常夠嚴格的人才會受到認可
	* 中繼憑證
		* 根憑證的更斯，能信任/授權其他公司的憑證，使其成為中繼憑證
	* CA (Certificate Authentication)
* 憑證有效期限
	* 之前是一次三年(好像是因為蘋果的政策)
	* 從今年10月之後，就都會是最多兩年
* 今天會自己做一個簽證
* `openssl genrsa -out CA.key 2048`
	* gen一個2048 bit的RSA key pair
	* 裡面是兩組數字，64位編碼
* 產生簽證
	* x509的標準
	* 會問一些給人看的問題
		* TW, Taiwan, HsinChu, CSA class, , 
* windows上安裝憑證
	* 副檔名改成.der
	* 直接點開w
* 要怎麼把憑證給網站用?
	* 有一個公眾認可的CA，我們server給他CSA
	* 傳回來crt
	* 我們必須用這個crt跟我們的private key才能加解密
* 接下來產生server的key pair
	* 用那個公鑰來產生CSR
	* **注意**
	* 回答問題的時候，Common Name在這裡就很重要了，要填寫網址
	* challenging password就隨便吧
* `openssl x509 -in server.crt -noout -text`
	* 想看crt裡面寫什麼，可以用這個看看
* 加進server
	* /usr/local/etc/apache24/httpd.conf 三個地方拿掉註解
		* 1.
	* 接下來修改 /usr/local/apache24/extra/httpd-ssl.conf
		* certificate有三個段落
		* 
* 免費的憑證
	* Let's Encrypt
	* `certbot`
* pkg 安裝的
	* /usr/local/etc/apache24/httpd.conf
	* /usr/local/etc/rc.d/apache24 [restart|start|stop|configtest]
	* /usr/local/www/apache24/data/index.html
	* /var/log/httpd-error.log
* `certbot certonly --webroot -w /usr/local/www/apache24/data/ -d yfs.nthu.2y.idv.tw -d dns.nthu.2y.idv.tw`
	* -w 是網頁放的位置
	* -d 是我的網址
		* 可以打多個
	* ![](https://i.imgur.com/poittCH.png)

## 2020/11/09
### NFS
* 先去 /etc/rc.conf 新增:
	* 必要:
		`rpcbind_enable="YES"` 
	* server 端
		`nfs_server_enable="YES"`
		`nfs_reserved_port_only="YES"` 如果不用預設的port，NFS會隨便挑，這樣網管沒辦法設置防火牆例外
	* client 端
		`nfs_client_enable="YES"`
	* 接著重開機
#### client端
* `showmount -e 140.114.86.1`
	* client端看看這個server有沒有分享東西
	* ![](https://i.imgur.com/EUgLerQ.png)
		* 140.114.86.1允許任何人存取 /share 這個資料夾
	* 注意，mountd必須要跑起來 (應該)
* `mount -t nfs 140.114.86.1:/share /mnt/`
	* 把<ip>:<目錄> 掛到本機的 /mnt/
	* /mnt目錄是linux、bsd原本就提供的資料夾，就是用來給你掛東西的
	* 要把防火牆關掉、或是設置例外
* `df`
	* 列出你現在有哪些檔案系統
	* `mount`
		* 好像也一樣
* `umount /mnt`
	* **u**mount
	* 反mount
* /etc/fstab
	* 開機自動掛載
	* ![](https://i.imgur.com/IuEeU1P.png)
		* 原本大概是長這樣
		* dump, pass# 似乎是設定檢查的部分，NFS的話，就不用檢查(設0)
	* 新增像是這樣的東西
		* `140.114.86.15:/share	/mnt/share	nfs	ro	0	0`

#### server端
* 先啟動 nfsd
	* `service nfsd restart`
		* mountd 應該也會一起被打開
* /etc/exports
	* NFS的設定檔 - 要共享哪些目錄、存取權限
	* 通常一開始不會存在
	* 直接寫一行 `/share`，全世界就可寫可讀這個資料夾
	* 有選項可以加
		* `/share -ro 140.114.86.15` => 只給<ip>唯讀
			* 要寫網址/名稱也可以，只要查得到IP
		* `/share -ro`所有人唯讀
		* `-alldirs` 如果 /share 下面的目錄還有目錄...，允許掛載那些子目錄，否則就只能從 /share 掛起來
		* `-maproot=0` 如果 client 端是用 root 帳號 mount server 的資料夾，client 端就會以 root 的身分操作這個被分享的資料夾
		* `/share /share2 -ro -maproot=0 140.114.86.15` 這樣應該也行
		* 可以`man exports`看看有啥
	* 記得建立你要分享的那個目錄w
* mountd
	* server負責管nfs mount的部分
	* 執行 /etc/rc.d/nfsd就會跑起來
	* 要重新啟動，先把mountd kill掉
		* `kill -1 <pid>`
			* `kill -1` 表示傳送 HUP signal；對於 daemon 來說通常是重新載入設定檔的意思
			* service nfsd restart 應該也是可以 吧
#### autofs
* 很多台電腦，要一個一個mount很累
* amd - auto mount deamon
	* 可以讓 `/net/140.114.86.15/share` 這個位置直接對應到<IP>那台主機用NFS分享的 /share 資料夾
	* 在rc.conf多一行 `amd_enable="YES"`
	* /etc/rc.d/amd start
		* 或 service amd start
	* 會出現兩個目錄: /net 以及 /host
		* cd到/net，直接cd到有nfs的主機ip位置，amd就會自動mount然後cd進去
			* ex `/net/140.114.86.15/share`
		* /host 目錄用法一樣
### HW
* 開啟nfs功能，創立sharey資料夾，無存取限制，所有人皆可

## 2020/11/23
### SAMBA
* `pkg search samba` `pkg install samba<version>`
    * 安裝完會告知設定檔案應該在哪
        * /usr/loca/etc/smb4.conf
    * `[global]` 是指生效範圍，其他的如`[homes]`, `[share]`是目錄名稱
    	* valid users = <user> [user [user ...]]
    		* 允許哪些使用者存取
    	* force user = <user>
    		* 讓使用者以 <user> 的身分存取分享的檔案
* `smbpasswd -a yfs`
    * `-a` 新增smb使用者
    * `yfs` 使用者名稱
    * 注意，這個 SAMBA 的帳號密碼跟 freeBSD 機器上的是不一樣的，SAMBA 用的是 smbpasswd 自己管的
	* **注意**，SAMBA 建立的帳號，freeBSD 必須也存在這個使用者 (valid users 後面寫的使用者在 freeBSD 跟 SAMBA 都要存在)
		* 提醒: `adduser <user_name>` 可以建立新的使用者
* windows 不能一次登入兩個samba
    * 去cmd `net use` 砍掉已經登入的
        ```
        狀態       本機        遠端                    網路

        -------------------------------------------------------------------------------
        OK                     \\140.114.86.15\IPC$      Microsoft Windows Network
        命令已經成功完成。
        ```
    * `net use \\140.114.86.15\IPC$ /delete`

### 磁碟管理
* `camcontrol devlist`
    * cam指的是 斷電後不會掉資料的裝置
* `gpart`
	* 是硬碟分割區相關的指令
    * `gpart show`
        * 會把所有的 partition table 印出來
    * `gpart `**`create`**` -s gpt /dev/ada[0|1|...]`  ( <=> **destroy** )
    	* 建立 **partition table**
        * `-s` schema
            * gpt: GUID partition talbe
            * 有mbr, ldm, bsd64...
        * /dev/ada0
    * `gpart `**`add`**` -t freebsd-ufs -s 100M /dev/ada[0|1|...]`  ( <=> **delete** )
        * `-t` **partition** 的 type
        	* 如 freebsd-boot, freebsd-swap...
            * 可以man gpart，查 "PARTITION TYPE"
        * `-s`
            * 100M 切一個100M的，沒有加M，會是sector，512Byte

## 2020-11-30
(接續磁碟管理)
* **注意**
    * 用SATA的話，磁碟名稱是`ada`，SCSI的話，是`da`
    * 用windows開啟磁碟管理，看到一塊一塊的，就是partition
    * ![](https://i.imgur.com/T4wlkRG.png)
	* 用 `gpart show` 來看 freeBSD 的 partition
* `camcontrol devlist`
	* "cam"
    * `devlist`: device list
    * 可以列出機器上所有能儲存資料的裝置
* `gpart `**`delete`**` -i <#> ada<#>`
    * 砍掉 ada0, ada1... 的第 1, 2...個 **partition**
    * gpart delete -i 1 ada0  =>  ada0p1
* `gpart `**`destroy`**` [ada0|ada1|...]`
    * 砍掉硬碟的 **partition table**  (這樣就跟初始狀態一樣)
* 即使不建立 partition，硬碟也可以直接使用 (how :V)
* `ls /dev/diskid/`
	* 可以看到 camcontrol devlist 印出來那串很長的磁碟編號
* `gpart show [ada0|ada1|...]`
	* 只看特定 partition table 長什麼樣

#### gvinum
* 用來組 raid 的工具
* `gvinum`
    * > list
        * drive/volume/plex/subdisk
    * > create
        * 進到編輯器
        * 新增 `drive cd1 device /dev/ada0p1`
        	* 建立名為 cd1 的 drive，使用的是 ada0 的第一個 partition
            * `cd` concat disk
                * 為什麼不是從cd0開始?
                * 因為是concat的第一個
                * (就一個慣例
            * 儲存退出，生效後會被加到註解
            * 再加入ada1p1, ada2p1
    * > create 
        * volume concat
            * concat 是我們決定的 volume 的名字 (因為接下來以 concat 的方式作為範例)
    * > create 
        * plex name concat_plex org concat  vol concat
            * concat_plex 為名稱的 plex
            * `org` organization 
            	* 以 concat 的方式組成
            * `vol` 是 volume "concat" 的 plex
    * > create 
        * sd name c_p_d1 drive cd1 plex concat_plex
            * `sd` subdisk
            * 名為 c_p_d1
            	* concat disk - concat plex - disk 1
            * `drive` 用 cd1 的 disk
            * 把 drive 放到 plex "concat_plex"
            * 把 c_p_d2, c_p_d3 也加進去
    * 注意，建議不要分次新增，一次弄好比較好
    * 這樣子分次新增，建好了也不會變成up (不會自行啟動)
        * setstate up 
            * `setstate` 來讓 volume/plex/subdisk/drive 啟動
            * 其他版本可能可以用 `start <volume|plex|...>`
    * > rm concat_plex 
        * 用來砍掉這個plex
        * 但一定不給砍
        * 要直接從volume開始 -r 砍
    * `ls /dev/gvinum`
        * 這個資料夾底下就會是我們建好的volume
	* 結果:
		* ![](https://i.imgur.com/V23F03d.png)
	* 這個 concat 的 volume 就變成是一顆硬碟，要使用的話就先建立 file system，然後 mount 起來
		* `newfs /dev/gvinum/concat`
			* 對這個合併的disk建立file system
		* `mount /dev/gvinum/concat /mnt/`
* df (-kh)
    * 看空間
* 重開機之後，不會看到這個"硬碟"
    * 修改 /boot/loader.conf
        * 新增 `geom_vinum_load="YES"`
    * 修改 /etc/fstab
    	* 參考 NFS 那邊
* 如果重啟後，用gvinum看subdisk不會自己啟動:
    * 手動開好後
    * `gvinum saveconfig`
* 範例二: 新增mirror
* `gvinum`
    * > create
        * drive md1 device /dev/ada4p1
        * drive md2 device /dev/ada5p1
        * volume mirror
        * plex name mirror_plex1 org concat vol mirror
        * plex name mirror_plex2 org concat vol mirror
        * sd name m_p_1 drive md1 plex mirror_plex1
        * sd name m_p_2 drive md2 plex mirror_plex2
* 一個plex，subdisk的新增順序很重要
* `dd if=/dev/ada3 of=/dev/null`
    * 讀 /dev/ada3 的資料
    * 到 /dev/null (直接丟掉)
    * 用來確認ada3是哪顆實體的硬碟
    * 有/dev/zero可以用，就是真的一堆的0x00給你讀

### 復原
* 

## 2020-12-07
### ZFS
* 上星期做的gvinum，基本上是創造新的device，弄完還需要給他格式化才能使用
* 載入zfs kernel功能
    * /boot/loader.conf 新增一行 zfs_load="YES"
* 開機狀態直接載入zfs
    * `kldload zfs`
#### zpool 資源池
* `zpool create pool0 /dev/ada6 /dev/ada7 /dev/ada8`
    * create 建立資源池
    * pool0 命名這個資源池
    * 後面寫上要使用的硬碟
* `zpool list`
* `zpool status`
* 空間用完了怎麼辦? 塞一顆新的進去pool
    * `zpool add pool0 /dev/ada3`
* 怎麼砍?
    * `zpool destroy pool0`
* `zpool create pool2 mirror /dev/ada6 /dev/ada7`
    * 建立一個 `mirror` ，使用後面給的兩顆硬碟
    * 要塞進新的硬碟的話，通常是要一次兩顆，但真的要的話，可以 add -f 強制加入
    * zpool add mirror pool2 /dev/ada8
* `zpool create pool0 raidz3 <硬碟們>`
    * *raidz3 requires at least 4 devices*
    * 壞三顆硬碟還是可以救
* /etc/rc.conf
    * zfs_enable="YES"
* 假設用了raidz3，其中一顆壞掉了，要用新的硬碟取代
    * 先用zpool status看看NAME裡面，遺失的那顆的一長串數字
    * zpool replace pool0 <那串數字> /dev/ada10 
        * 用 `ada10` 取代 `pool0` 裡面 <那串數字> 原本的硬碟
* zfs create 
* zfs set
    * 可以看有哪些神奇的功能(壓縮、去重複等)
    * zfs set compression=on pool/zfs1
        * 讀寫這裡面的東西都要加/解壓縮
* `du -h` 可以看資料夾內檔案大小
* `zfs snapshot pool0/zfs1@2020-12-07`
    * 對pool0/zfs1的檔案系統做快照，命名為2020-12-07
* `zfs list -t snapshot`
    * 列出有快照的
* zfs rollback pool0/zfs1@2020-12-07
    * 如果在快照之後有新的東西，做了rollback，新的東西也會消失
* zfs clone pool0/zfs1@2020-12-07 /pool0/zfs2
    * `zfs list` 就可以看到快照的資料跑到/pool0/zfs2
* 如何改變掛載點?
    * 建一個範例 `zfs craete pool0/zfs2/subdir`
    * `zfs set mountpoint=/subdir /pool0/zfs2/subdir`
        * 把後面的資料夾改掛到前面的位置
* zfs get
    * 可以看一堆參數

### mail
* 先處理DNS
    * 在領域檔(/usr/local/etc/named/master/yfs.nthu.2y.idv.tw.hosts)新增兩行
        * mail.yfs.nthu.2y.idv.tw.  IN  A  140.114.86.15
        * mail.yfs.nthu.2y.idv.tw.  IN  MX  0 mail.yfs.nthu.2y.idv.tw.
            * `0` 代表優先度 (查查 MX 優先權)
			* 這一行前面的 mail.yfs~~~ 是 email 的小老鼠後面想要的名稱，後面是主機的位置
			* 這個主機的位置似乎不允許直接寫 IP，所以必須用這樣的網址
			* 要用網址，就要確保這個網址能夠對應到 IP，所以要加一個 A 紀錄
    * 接著service named restart
    * 去 http://nthu.2y.idv.tw/ 新增 2 個紀錄
        * `mail`  IN  MX 0  `mail.yfs.nthu.2y.idv.tw.`
        * `mail`  IN  A     `140.114.86.15`
        * 記得原本已經有的要填上
* /etc/rc.conf 新增
	* `sendmail_enable="YES"`
* hostname 要跟改成上面設定的一樣
	* 在 /etc/rc.conf 改成 mail.yfs.nthu.2y.idv.tw
* 重新啟動

#### 設定
* 在 /etc/mail/ 裡面下 make
	* 如果沒有設定檔，會產生以主機名稱命名的 .mc 跟 .cf 的 default設定檔
	* mc 透過 "m4" compiler 變成 cf 檔，變成系統真正使用的格式
	* 接著要再 make install，系統才會真的套用設定
* service sendmail restart
* 這樣就可以收信了
* 信件會放在 /var/mail/ 底下
	* 裡面預設是一堆每個使用者為名的文字檔
	* 每個人的信件就直接寫在個別的文字檔裡面
* 可以試試 gmail 寄給 yfs@mail.yfs.nthu.2y.idv.tw

### dovecot
* 允許 IMAP 跟 POP 的收信
* 跟著講義
* cp 的部分，要加 -r
* 啟動dovecot的部分，要重啟兩次
    * 也可以用 service dovecot restart

### 信件軟體 Thunderbird
* 2020/12/07 影片 1:57:20 開始

### Relay
* 在 \$hostname.mc 裡面找 access_db 的 FEATURE 設定，這東西是設定要收哪裡來的信，哪裡的不收
	* 發現是看 /etc/mail/access
* 修改 /etc/mail/access，新增
	* 140.114.86  RELAY
		* 代表允許這個 IP 底下的機器(140.114.86.0~255)透過我這台主機送信出去
		* 如果只加 RELAY，代表允許全世界的人都可以透過我發信；不用幾小時就變垃圾郵件主機了
* 在 /etc/mail 下 make
* 這樣就可以透過其他郵件軟體 (Thunderbird) 用這台主機發信給別人

## 2020-12-14
### Sendmail - 認證SMTP
* 允許使用帳號登入
* 第一步
    * `pkg search cyrus-sasl`
    	* 一個認證的協定
    * `pkg install cyrus-sasl2`
    * `pkg install cyrus-sasl2-saslauthd`  << 這個也要
* 第二步 (step 3) 重新編譯
    * 到 /usr/src/lib/libsmutil 
        * make clean
        * make
    * 到 /usr/src/lib/libsm
        * make clean
        * make
    * 到 /usr/src/usr.sbin/sendmail
        * make clean
        * make
        * make install
* (step 2)
    * 到 /etc/mail 開一個 [hostname].mc 的檔案
        * 塞入網站上那串
        * 再make
* ......
* 測試 IMAP4
    * 優點: 信件不會下載到客戶端，操作都跟server同步
    * 
    * telnet localhost 143
    * L001 LOGIN yfs yf01-BSD
* telnet直接明碼，智障一樣，要給他+ SSL
    * 加密之後telnet不能連
    * 可以用 openssl s_client -host [IP] -port [port]
### NIS
* 讓不同電腦上能夠用同樣的帳號登入
* 要取不同的網域名稱
    * server就取 NIS106062223
    * 盡量不要減號底線小數點
* 步驟
    * cd /var/yp
    * cp /etc/master.passwd /var/yp/
    * vim ./master.passwd
        * 砍掉不用的帳號
            * 只留yfs, csa, cifs
        * 這些就是可以在client上直接使用的帳號
    * 接著在/etc/rc.conf加入
        ```
        nisdomainname="NIS1060622223"
        nis_server_enable="YES"
        nis_yppasswdd_enable="YES"
        rpcbind_enable="YES"
        nis_client_enable="YES"
        ```
    * 重啟
    * 重登後，打domainname, yp

### HW
* pkg search php74
* pkg search mod_php74
* pkg search mysql57
    * client + server
* pkg search mariadb (optional)
    * ver 10.X
* Nextcloud
    * 下星期的作業就會是要安裝這個，建立一個帳號讓助教登入

### single user mode
* "enter"
* fsck -y /
* mount -u /


## 2020-12-21
### 自己嘗試裝 Nextcloud
* 網路查到，只要準備好Apache, MySql, PHP，再安裝nextcloud就可以用了
#### 安裝mysql server (就包含了client)
* `pkg install php74`
* `pkg install mysql57-server`
    ![](https://i.imgur.com/yz4Os9t.png)
    * 上面說的 "This is the mysql CLIENT without the server."
    * 是 groff-1.22.4_3 說的
    * 下面有 mysql_57-server-5.7.32 的訊息 (就是有安裝到啦，別擔心)
* `pkg install nextcloud-php74`
    ![](https://i.imgur.com/T0C0rDY.png)

### 上課~
* 首先確認 web server 正常
    * 網頁開自己的網址/IP看
* `pkg install php73`
* `pkg install mod_php73`
* 接著在 web server 主設定檔加入:
    ```
    <FilesMatch "\.phps$">
        SetHandler application/x-httpd-php-source
    </FilesMatch>
    ```
    * 以及在 DirectoryIndex index.html 同一行加入 index.php
        * 變成 `DirectoryIndex index.html index.php`
* `pkg install mysql57-server`
    * 畫面上會告知，在home目錄有一個預設密碼
    * 到 /etc/rc.conf 加入 mysql_enable="YES"
    * service mysql-server start
        * 之後會在 home 目錄多一個 ~/.mysql_secret (之類的) 
    * 輸入 `mysql -u root -p`
        * 接著輸入預設密碼，即可用 root 登入 mysql
        * `\q`, `exit`, `quit` 都可以退出
* 安裝圖形化介面 (會下 sql 指令可以跳過)
    * [MySQL Administrator (GUI)](http://dev.mysql.com/downloads/workbench/)
* 接著幫資料庫建帳號
    * 比較特別
    * 還會看IP
        * 從不同機器，可以需要不同密碼
    * `grant all privileges on *.* to user@'%' identified by 'password';`
        * 將所有權限(`all privileges`)授權給: 從任意主機(`%`之意，不含本機)登入的`user`帳號，所有database(第一個`*`之意)底下的所有table(第二個`*`)
        * '%'是sql的特殊字元，代表任意字元
            * user@'%' 就是用 user 從任意主機連的都可以
            * 但是不包含本機
        * 會發現不給執行，因為root使用的是預設的密碼，要先改掉
    * `set password = PASSWORD('<在此輸入密碼>')`
        * 這樣來重設root密碼
        * 就可以回去執行上一行
    * `grant all privileges on *.* to user@'localhost' identified by 'password';`
        * 這樣就可以允許能在本機登入 (選用)
* 使用 MySQL Workbench
    * 用 standard over ssh
    * 會有兩個帳號要填: SSH、MYSQL
    * 第一個 SSH Username, Password，就是平常用ssh能登入的帳號
    * MySQL Username 就是可以用前面給所有權限的 `user` 帳號登入
    * MySQL Hostname 這欄，如果輸入本機 (127.0.0.1)，在Username 就只能用 root 登入
        * 如果要用其他使用者 (如 user)，就要以其他 IP 登入 (140.114... or 192.168...)
* 安裝 Nextcloud
    * 老師使用的是 webinstaller
        * 這東西是個 php 檔，把它放在網頁開得起來的地方
            * 我在 /usr/local/www/apache24/data/ 開個 nextcloud 資料夾
        * cd 到目標資料夾，`wget https://download.nextcloud.com/server/installer/setup-nextcloud.php`
        * 接著用瀏覽器開 `yfs.nthu.2y.idv.tw/nextcloud/setup-nextcloud.php`
        * 可以看到nextcloud有哪些dependency需要安裝，就手動裝一裝
        * 裝完之後指定安裝路徑
        * 之後大概會有"內部伺服器錯誤"
            * 可能是因為 .htaccess 
            * 去 apache 主設定檔
                * AllowOverride none 改成 All
        * 最後發現是最新的 nextcloud 不喜歡 php 7.3版
            * 改安裝 舊版的 nextcloud
        * 可以去 port 找到網址在哪
            * `vim /usr/ports/www/nextcloud/Makefile`
            * 在 https://download.nextcloud.com/server/releases/
        * 最後發現，少了 php73-session
            * debug過程
            * 因為還在安裝過程，比較難發現錯誤
            * 如果裝好了，會在資料夾下面有另一個data的資料夾
            * 如果我們現在mkdir這個data資料夾，錯誤會被寫進去
            * 
### `rcvar`
* service mysql-server rcvar
    * ![](https://i.imgur.com/L4An4XB.png)
* 

### HW
* 建立一個使用者:
    * 帳號: user
    * 密碼: csacsauser


## 2020-12-28
### X Window
* 原名叫 X org
* pkg install xorg
* 開mobaxterm連線，起始畫面就會多xorg的訊息
    * mobaxterm會開啟x window的server，虛擬機的應用程式就會送到這個server
    * 負責顯示的是server
* pkg install xfce
    * 一個視窗管理介面
* 裝小工具
    * xeyes
        * 一個會跟隨游標的眼睛
    * xclock
    * xload
* pkg install gnome3
    * 也是另一個視窗管理介面
* 字體
    * pkg install zh-kcfonts
    * pkg install zh-moettf
    * pkg install zh-arphicttf
    * pkg install zh-opendesktop-fonts
* 輸入法
    * 

### 增大硬碟
* 先關機
* 去設定，找到主硬碟，expand，輸入想要的大小
* 開機，用single user mode
    * gpart show 看一下，會發現多了一些free的空間
    * 由於free跨了swap，不能直接融合到跟目錄
    * 先把swap 砍掉(反正是當虛擬記憶體的，沒關係)
        * gpart delete ~~
    * gpart resize -i 2 -s 30G /dev/da0
    * 把swap 補回來
        * gpart add -t freebsd-swap /dev/da0
    * 這時候，硬碟空間變大了，但`df -h`看看，檔案系統還沒更新
        * growfs /dev/da0p2
        * 他會警告，這步驟很容易檔案遺失
    * 重開機

### 設定x server
* 確認主機名稱
    * mail.yfs.nthu.2y.idv.tw
* 回憶: alt + F1~F8 可以切換到虛擬桌面0~7
* 開了 "X" 之後，會切到第9個(#8)虛擬桌面，要回來的話，要按ctrl + alt + F1 (依據你從哪個視窗開X)
    * 注意，打了X，會在真正的(虛擬機上的)console出現視窗，所以用ssh連，要回去vmware看
* 先切回去把她關了
* `X -configure`
    * 會生成 ~/xorg.conf.new
    * 修改完之後覆蓋 /etc/X11/xorg.conf.d ，之後就會用這個設定檔
        * 或者用 X -configure <path_to_config_file>
* `startx`
    * 啟動x windows在vm上 (?)
    * ((但我的滑鼠不能動 QAQ
    * !!!
    * 啟動moused服務
        * vim /etc/rc.conf
            * moused_enable="YES"
        * service moused start
* `pkg install dbus` 裝dbus
    * desktop manager 需要用到 (某些  吧)
* /usr/local/etc/X11/xinit/xinitrc 是全使用者的設定檔
    * 建立一個 ~/.xinitrc ，就可以用個人化的設定
* desktop manager
    * xorg 對應到 xdm
        * pkg install xdm
        * pkg install xsm  (session manager)
        * 要用中文化，不建議用xorg+xdm，因為要改系統的設定，不只是cshrc之類的
    * xfce 對應到 slim
        * pkg install slim
        * 建議使用這個
    * gnome 對應到 gdm
* `pkg install open-vm-tools`
* 裝好後 `startx` 就可以啟動
* 但要先在 ~/.xinitrc 新增
    * exec startxfce4
* 這樣才會啟動 xfce


### 中文化
* 兩個部分: 顯示中文、輸入中文
* 顯示的部分
* pkg install zh-kcfonts zh-moettf zh-arphicttf zh-opendesktop-fonts
    * 全裝了
![](https://i.imgur.com/G2slEqa.png)
* 輸入法 SCIM
* `pkg install zh-scim-tables`
* `vim .cshrc`
    > setenv LC_CTYPE zh_TW.UTF-8
    > setenv LANG zh_TW.UTF-8
    > setenv XMODIFIERS @im=SCIM
    * 注意，在上一步安裝的zh-scim-tables，在第三個setenv XMODIFIERS，就要對應到SCIM
        * 其他的有啥?
* 裝完輸入法，要在啟動x windows時(就是輸入startx)也把他開起來
* ~/.xinitrc 改成
    * `scim -d &`
        * 啟動輸入法
    * `exec startxfce4`

### vnc
* pkg install tightvnc
* vncserver -geometry 1366x768
    * 會有訊息告訴你
* 如何關閉
    * vncserver -kill :1
* ~/.vnc/xstartup
    * 

### xrdp
回去再補拉QAQ

### VirtualBox
* 虛擬機開虛擬機
* 去設定vmware，cpu，允許virtualize intel VT-x/EPT or AMD-v/RVI
    * 要先關機
* `pkg install virtualbox-ose`
    * open source edition
* 老師使用x windows來開
* 可以在左上角應用程式-系統 oracle vm~~
* 想要建立的話，會發現有錯誤，需要載入kernel東西
    * 執行 service vboxnet onestart
* 