# 計算機系統管理
[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 是我的網址
* 可以打多個
* 
## 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有沒有分享東西
* 
* 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
* 開機自動掛載
* 
* 原本大概是長這樣
* 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
* 
* 用 `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
* 結果:
* 
* 這個 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`

* 上面說的 "This is the mysql CLIENT without the server."
* 是 groff-1.22.4_3 說的
* 下面有 mysql_57-server-5.7.32 的訊息 (就是有安裝到啦,別擔心)
* `pkg install nextcloud-php74`

### 上課~
* 首先確認 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
* 
*
### 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
* 全裝了

* 輸入法 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
*