VMware ESXi – Arch Linux 安裝 vm-tools

安裝在 ESXi Server 中的 Arch Linux 也安裝了 open-vm-tools,但系統上還是顯示未安裝

安裝 open-vm-tools
# pcman -S open-vm-tools

檢查系統是否有安裝
# pacman -Qs open-vm-tools
local/open-vm-tools 6:10.1.0-2
    The Open Virtual Machine Tools (open-vm-tools) are the open source
    implementation of VMware Tools[@more@]原因是未啟動 vmtoolsd 服務,啟用了就正常了!
# systemctl list-unit-files | grep vmtools
vmtoolsd.service                                                       disabled
# systemctl enable vmtoolsd.service
Created symlink /etc/systemd/system/multi-user.target.wants/vmtoolsd.service → /usr/lib/systemd/system/vmtoolsd.service.
# systemctl start vmtoolsd.service

安裝 Arch Linux

之前用的 Arch Linux 不論是在 Banana Pi 或是 Proxmox 上,都是系統已經初步完成了,只要再安裝一些程式就可以使用了,很少自己動手,從安裝光碟來安裝,這一次剛好利用 VMware ESXi 測試系統時,手動來安裝一次,發現它的安裝還是保持了最早 Linux 的安裝方式,一切都要自己動手,一步一步的來,從分割硬碟、設定網路、安裝套件、開機程式…,在今天這種 Linux 都已經朝向簡單易安裝的模式中,非常的特別,和我最早學習的 Slackware Linux 很相近。
個人對於 Arch Linux 有一種偏愛,因為它的系統安裝完成不大,執行速度快,需要什麼套件由自己來安裝,而且它是採用無縫升級,永遠可以更新到最新版本,不像有些系統,有一些固定的支援期,或是每半年就推出一個新版本,大家好像都在當白老鼠,而且還玩的很愉快,我也是其中之一。
參考網頁:
滾動式更新無縫升級 Arch Linux簡介及安裝 – 技術專欄 – 網管人NetAdmin
Linux – 簡易安裝 Arch Linux 教學 | Mr. Opengate

Arch Linux 官方網站:https://www.archlinux.org/
Arch Linux 下載網頁:https://www.archlinux.org/download/
目前下載時最新的版本是 2017.03.01 版
[@more@]

1. 光碟開機畫面

2. 開機畫面

3. 開機完成

4. 使用 cgdisk 分割硬碟
     # cgdisk /dev/sda

5. 選擇 New 建立新分割區

6. 輸入分割區的大小

7. 分割區的型式,直接按 Enter 鍵即可,內定是 8300

8. 分割區名稱,直接按 Enter 鍵

9. 選擇 New 建立新的分割區 SWAP

10. 直接按 Enter 鍵,剩下的空間全部拿來做為 SWAP

11. 輸入  L 查看 SWAP 的型別

12. Linux SWAP 型別是 8200

13. 輸入SWAP 硬碟型別 8200

14. 選擇 Write,將硬碟分割寫入

15. 輸入 yes,做確認

16. 選擇 Quit 結束

17. 改用 cfdisk 來分割硬碟
      # cfdisk /dev/sda

18. 選用 gpt

19. 硬碟分割畫面

20. 選擇 New 建立新的分割區

21. 直接輸入分割區的大小

22. 選擇 New 建立新的分割區 SWAP

23. 輸入剩下的硬碟空間

24. 選擇 Type 更改 SWAP 型別

25. 選擇 Linux swap

26. 選擇 Write 寫入設定

27. 輸入 yes 確認

28. 選擇 Quit 結束

29. 格式化硬碟及掛載目錄
      # mkfs.ext4 /dev/sda1
      # mkswap /dev/sda2
      # mount /dev/sda1 /mnt

30. 查看網路卡的代號 ens33
       # ip addr show

31. 設定網路
      # ip addr add 192.168.1.29/24 dev ens33
      # ip route add default via 192.168.1.254

32. 設定 DNS 查詢主機

33. 設定更新的 Server 以在台灣為優先
      # cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.$(date +%F)
      # sed -i ‘/^Server/s/Server/#Server/’ /etc/pacman.d/mirrorlist
      # sed -i ‘/.tw//s/#Server/Server/’ /etc/pacman.d/mirrorlist

34. 更新套件庫
      # pacman -Syy

35. 安裝基本系統及 grub
      # pacstrap /mnt base grub

36. 建立新系統的 /etc/fstab
      # genfstab -U -p /mnt >> mnt/etc/fstab

37. Chroot 到 /mnt 目錄之下
      # arch-chroot /mnt

38. 設定主機名稱
      # echo arch > /etc/hostname

39. 設定時區
      # ln -s /usr/share/zineinfo/Asia/Taipei /etc/localtime

如果出現錯誤訊息,請刪除之後,再重新連結

40. 查看時區是否為 CST
     
# date

41. 設定支援的語系
      # sed -i ‘s/^#en_US.UTF-8/en_US.UTF-8/’ /etc/locale.gen
      # sed -i ‘s/^#zh_TW.UTF-8/zh_TW.UTF-8/’ /etc/locale.gen

42. 進行設定
       # locale-gen

43. 設定預設的語系
      # echo ‘LANG=”en_US.UTF-8″‘ > /etc/locale.conf

44. 將 SWAP 分割區的設定加入到 /etc/fstab

45. 建立開機映像檔
      # mkinitcpio -p linux

46. 設定 root 密碼

47.  安裝 grub 到 /dev/sda
      # grub-install –target=i386-pc –recheck /dev/sda –force

48. 建立 grub 開機功能表
      # grub-mkconfig -o /boot/grub/grub.cfg

49. 退出、卸載分割區、重新開機
      # exit;umount /mnt;reboot

50. 開機畫面

51. 登入畫面

52. 登入成功

53. 查看網路

54. 設定網路

55. 設定 DNS 查詢設定
       # rm -rf /etc/resolv.conf
       # ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

56. 啟動相關服務
      # systemctl disable netctl.service
      # systemctl enable systemd-networkd.service
      # systemctl ensable systemd-resolved.service
      # systemctl start systemd-networkd.service
      # systemctl start systemd-resolved.service

57. 測試網路

58. 測試 DNS 查詢

判別 Linux 系統是不是在虛擬機器

方式很多種
以下針對 VMware 所架設的虛擬機器
1. 使用 lshw 指令
# yum install lshw
# lshw | grep -m 1 product
    product: VMware Virtual Platform

2. 使用 lspci 指令
# yum install pciutils
# lspci | grep -m 1 System
00:07.7 System peripheral: VMware Virtual Machine Communication Interface (rev 10)

3. 使用 dmidecode 指令
# yum install dmidecode
# dmidecode | grep -m 1 Product
        Product Name: VMware Virtual Platform[@more@]4. 使用 virt-what 指令
# yum install virt-what
# apt-get install virt-what
在 VMware
# virt-what
vmware
在 Proxmox
# virt-what
lxc
在 VirtualBox
# virt-what
virtualbox

ss 網路管理工具

ss 的功能和 netstat 相近。
主要參數有:

說明
-a顯示所有的 socket !
-n以數字來取代介面名稱與 port 號!
-t顯示使用 TCP 的 socket !
-u顯示使用 UDP 的 socket !
-l只顯示監聽中的 socket !
-p顯示 socket 執行序的 ID 號碼!

[@more@]# ss -antulp
Netid State      Recv-Q Send-Q                                                          Local Address:Port                                                                         Peer Address:Port
udp   UNCONN     0      0                                                                           *:161                                                                                     *:*                   users:((“snmpd”,pid=52,fd=6))
tcp   LISTEN     0      128                                                                 127.0.0.1:199                                                                                     *:*                   users:((“snmpd”,pid=52,fd=7))
tcp   LISTEN     0      128                                                                         *:22                                                                                      *:*                   users:((“sshd”,pid=72,fd=3))
tcp   LISTEN     0      128                                                                        :::22                                                                                     :::*                   users:((“sshd”,pid=72,fd=4))

# netstat -antulp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:199           0.0.0.0:*               LISTEN      52/snmpd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      72/sshd
tcp6       0      0 :::22                   :::*                    LISTEN      72/sshd
udp        0      0 0.0.0.0:161             0.0.0.0:*                           52/snmpd

還是比較習慣使用 netstat

ip 網路管理工具

ip 指令和 ifconfig 的功能有些類似,但命令可以更加簡短

1. 列出所有網路介面 IP
# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
112: eth0@if113: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 9e:5b:bb:11:35:a7 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.1.17/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever[@more@]2. 單獨列出某一網路介面
# ip addr show eth0
# ip a s eth0
112: eth0@if113: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 9e:5b:bc:14:35:a7 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.1.17/24 brd 192.168.1.255 scope global eth0

3. 列出網路路由
# ip route
# ip r
default via 192.168.1.254 dev eth0
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.17

取出 IP
# ip a s eth0 | grep ‘inet ‘ | awk ‘{print $2}’ | awk -F’/’ ‘{print $1}’
192.168.1.17
# ip r | grep src | awk ‘{print $9}’
192.168.1.17

取出 mac address
# ip a s eth0 | grep ‘link/ether’ | awk ‘{print $2}’
9e:5b:bb:11:35:a7

使用 diff / patch 來修正檔案

diff 可以產生二個檔案之間的差異對照,然後利用 patch 來進行修正。

1.產生二個檔案間差異
-a 將所有檔案都視為文字檔
-u 輸出預設三行的相同文字行
-r 遞迴比較所有的子目錄
-N 將缺少的檔案視為空檔案
# diff -Naur server.conf.2017-02-20 server.conf > /root/server.diff

2. 將差異檔和待修正的檔案放在一起
# cp /etc/openvpn/server.conf.2017-02-20 /root/server.conf

3. 利用 patch 進行修正
# cd /root
# patch -i server.diff

4. 比較二者間是否有差異
# diff /root/server.conf /etc/openvpn/server.conf

如果執行完後沒有任何訊息,代表二個檔案完全相同

Proxmox – LXC 掛載 NFS 分享的目錄

本來學校的 Server 都是先備份到 NAS 然後再同步到 Google Drive,不過 PVE Server 不允許 LXC 直接掛載其它主機所分享的 NFS,如果要使用的話,必須要先在 PVE Server 上已經掛載連接的目錄才可以使用,可能是為了系統安全的因素。

1. 在 PVE Server 上安裝 autofs
# apt-get install autofs

2. 修改 /etc/auto.master
# vim /etc/auto.master
加入下面一行
/mnt/nasnfs     /etc/auto.nfs

3. 建立 /etc/auto.nfs 設定檔
# vim /etc/auto.nfs
# pve 本機上要掛載的目錄,配合前面就是 /mnt/nasnfs/pve
# 192.168.1.13:/volume1/homes/t850008/Server/pve nas server 上的目錄
pve 192.168.1.13:/volume1/homes/t850008/Server/pve[@more@]4. 啟動 autofs 服務
# systemctl start autofs
# systemctl enable autofs

5. 測試
# cd /mnt/nasnfs/pve
# df -h | grep t850008
192.168.1.13:/volume1/homes/t850008/Server/pve  5.4T  2.5T  2.9T  47% /mnt/nasnfs/pve

6. 在 LXC 設定檔中加入
mp0 是在 pve server 上的目錄
mp 是 lxc 虛擬機上要掛載的目錄
# cat /etc/pve/lxc/102.conf | grep mp
mp0: /mnt/nasnfs/pve,mp=/mnt/ArchLinux

7. 在 LXC 上設定
# mount | grep ArchLinux
192.168.1.13:/volume1/homes/t850008/Server/pve on /mnt/ArchLinux type nfs4 (rw,relatime,vers=4.0,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.11,local_lock=none,addr=192.168.1.13)
# cd /mnt/ArchLinux
# df -h | grep ArchLinux
192.168.1.13:/volume1/homes/t850008/Server/pve  5.4T  2.5T  2.9T  47% /mnt/ArchLinux

在 PVE Server 上的設定

Proxmox – ArchLinux LXC 初始環境設定

1. 將套件庫來源設定成 Taiwan
# sed -i ‘s/^Server/#Server/’ /etc/pacman.d/mirrorlist
# sed -i ‘373s/#Server/Server/’ /etc/pacman.d/mirrorlist

2. 更新套件庫
# pacman -Syy
[@more@]3. 更新金鑰
執行時間會有些久
# pacman-key –init
# rm -rf /etc/pacman.d/gnupg/
# rm -rf /root/.gnupg/
# gpg –refresh-keys
# pacman-key –init && pacman-key –populate
gpg: /etc/pacman.d/gnupg/trustdb.gpg: trustdb created
gpg: no ultimately trusted keys found
gpg: starting migration from earlier GnuPG versions
gpg: porting secret keys from ‘/etc/pacman.d/gnupg/secring.gpg’ to gpg-agent
gpg: migration succeeded
gpg: Generating pacman keyring master key…
gpg: key 6C2605DB2059BF97 marked as ultimately trusted
gpg: directory ‘/etc/pacman.d/gnupg/openpgp-revocs.d’ created
gpg: revocation certificate stored as ‘/etc/pacman.d/gnupg/openpgp-revocs.d/EE25                                                                                               24C9262539E30E67A6B66C2605DB2059BF97.rev’
gpg: Done
==> Updating trust database…
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
==> Appending keys from archlinux.gpg…
==> Locally signing trusted keys in keyring…
  -> Locally signing key 684148BB25B49E986A4944C55184252D824B18E8…
  -> Locally signing key 91FFE0700E80619CEB73235CA88E23E377514E00…
  -> Locally signing key AB19265E5D7D20687D303246BA1DFB64FFF979E7…
  -> Locally signing key 0E8B644079F599DFC1DDC3973348882F6AC6A4C2…
  -> Locally signing key 44D4A033AC140143927397D47EFD567D4C7EA887…
  -> Locally signing key 27FFC4769E19F096D41D9265A04F9397CDFD6BB0…
==> Importing owner trust values…
gpg: setting ownertrust to 4
gpg: inserting ownertrust of 4
gpg: setting ownertrust to 4
gpg: setting ownertrust to 4
gpg: setting ownertrust to 4
gpg: setting ownertrust to 4
==> Disabling revoked keys in keyring…
  -> Disabling key 7FA647CD89891DEDC060287BB9113D1ED21E1A55…
  -> Disabling key D4DE5ABDE2A7287644EAC7E36D1A9E70E19DAA50…
  -> Disabling key BC1FBE4D2826A0B51E47ED62E2539214C6C11350…
  -> Disabling key 63F395DE2D6398BBE458F281F2DBB4931985A992…
  -> Disabling key 8F76BEEA0289F9E1D3E229C05F946DED983D4366…
  -> Disabling key 81D7F8241DB38BC759C80FCE3A726C6170E80477…
  -> Disabling key E7210A59715F6940CF9A4E36A001876699AD6E84…
  -> Disabling key F5A361A3A13554B85E57DDDAAF7EF7873CFD4BB6…
  -> Disabling key 9515D8A8EAB88E49BB65EDBCE6B456CAF15447D5…
  -> Disabling key 4A8B17E20B88ACA61860009B5CED81B7C2E5C0D2…
  -> Disabling key 0B20CA1931F5DA3A70D0F8D2EA6836E1AB441196…
  -> Disabling key 66BD74A036D522F51DD70A3C7F2A16726521E06D…
==> Updating trust database…
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   6  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1  valid:   6  signed:  68  trust: 0-, 0q, 0n, 6m, 0f, 0u
gpg: depth: 2  valid:  68  signed:   7  trust: 68-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2017-09-07
# pacman-key –refresh-keys

4. 更新已安裝套件
# pacman -Syu

5. 安裝 OpenSSH Server
# pacman -S openssh
# systemctl enable sshd.service
# systemctl start sshd.service

6.設定時區
# rm -rf /etc/localtime
# ln -s /usr/share/zoneinfo/Asia/Taipei /etc/localtime
# date

7. 安裝 vim 及 mlocate / dnsutils / net-tools 套件
# pacman -S vim mlocate dnsutils net-tools zip unzip p7zip ntp ssmtp logwatch screen colordiff net-snmp wget 

8. 安裝 cronie 工作排程
# pacman -S cronie
啟動 cronie
# systemctl start cronie
設定開機時啟動
# systemctl enable cronie

9. 安裝 syslog-ng
# pacman -S syslog-ng
設定開機時啟動
# systemctl enable syslog-ng
啟動 syslog-ng
# systemctl start syslog-ng

Proxmox – 解決 ArchLinux LXC 無法安裝套件的問題

在安裝套件或更新已安裝的套件時,都會出現如下圖的錯誤訊息

看起來似乎是沒有把 key 的值下載下來![@more@]解決方式:
參考網站:
[SOLVED] Resolving pacman-key update issues.

刪除 /etc/pacman.d/gnupg/ 目錄,如果目錄存在
# rm -R /etc/pacman.d/gnupg/
刪除 /root/.gnupg/ 目錄,如果目錄存在
# rm -R /root/.gnupg/
# gpg –refresh-keys
這個步驟會很久
# pacman-key –init && pacman-key –populate
# pacman-key –refresh-keys

Linux 下壓縮程式比較

原檔
$ ls -l UNUBeaconLogo128.png
-rw-r–r– 1 bananapi bananapi 25102 10月 12 17:16 UNUBeaconLogo128.png

使用 zip 格式
壓縮
# zip UNUBeaconLogo128.png.zip UNUBeaconLogo128.png
解壓縮
# unzip UNUBeaconLogo128.png.zip[@more@]

使用 7z 格式
壓縮
# 7z a
UNUBeaconLogo128.png.7z UNUBeaconLogo128.png
解壓縮
# 7z x UNUBeaconLogo128.png.7z

使用 gz 格式
壓縮(壓縮後原檔會不見)
# gzip
UNUBeaconLogo128.png
解壓縮(解壓縮後壓縮檔會不見)
# gzip -d UNUBeaconLogo128.png.gz
# gunzip UNUBeaconLogo128.png.gz

使用 xz 格式
壓縮(壓縮後原檔會不見)
# xz -z
UNUBeaconLogo128.png
解壓縮(解壓縮後壓縮檔會不見)
# xz -d UNUBeaconLogo128.png.xz
# unxz UNUBeaconLogo128.png.xz

綜合比較:在預設的情況下,不特別加上壓縮參數
$ ls -l UNUBeaconLogo128.png*
-rw-r–r– 1 bananapi bananapi 25102 10月 12 17:16 UNUBeaconLogo128.png
-rw-rw-r– 1 bananapi bananapi 11322 12月 24 13:54 UNUBeaconLogo128.png.7z
-rw-r–r– 1 bananapi bananapi 11378 10月 12 17:16 UNUBeaconLogo128.png.gz
-rw-r–r– 1 bananapi bananapi 11244 10月 12 17:16 UNUBeaconLogo128.png.xz
-rw-rw-r– 1 bananapi bananapi 11529 12月 24 13:54 UNUBeaconLogo128.png.zip

xz > 7z > gz > zip

gz / bz2 / xz 搭配 tar 使用
壓縮
# tar cjzf filename.tar.gz dirname
# tar cvjf filename.tar.bz2 dirname
# tar cvJf filename.tar.xz dirname

解壓縮
# tar xjzf filename.tar.gz
# tar xvjf filename.tar.bz2
# tar xvJf filename.tar.xz