# 計算機系統管理 [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 *