歡迎光臨 Planet openSUSE

這是一個訊息來源(feed)整合,收集了 openSUSE 貢獻者在他們個人部落格中的文章

要將您的部落格加入此整合中,請參閱此指引


週二
2018年07月17日


face
iSCSI Initiator with openSUSE Leap 42.3

OS: openSUSE Leap 42.3

iSCSI Target:  DellEMC SCV3000
iSCSI Initiator:  openSUSE Leap 42.3

Client ( iSCSI Initiatior 這邊 ):

還沒進行前先觀察資訊

#lsscsi
[0:0:0:0]    disk ATA    TS240GSSD220S 4AA   /dev/sda
[0:0:1:0]    disk ATA    TS240GSSD220S 4AA   /dev/sdb
[5:0:0:0]    cd/dvd HL-DT-ST DVD-ROM DTA0N    D100 /dev/sr0

觀察 iqn 名稱

# cat   /etc/iscsi/initiatorname.iscsi
##
## /etc/iscsi/iscsi.initiatorname
##
## Default iSCSI Initiatorname.
##
## DO NOT EDIT OR REMOVE THIS FILE!
## If you remove this file, the iSCSI daemon will not start.
## If you change the InitiatorName, existing access control lists
## may reject this initiator.  The InitiatorName must be unique
## for each iSCSI initiator.  Do NOT duplicate iSCSI InitiatorNames.
InitiatorName=iqn.1996-04.de.suse:01:7160b9aee1e0


Server ( iSCSI Target 這邊 ):

這邊我是使用 Dell Storage Manager - 2016 R3.20 Release (Linux Client) - for all regions except China

>  cd /var/lib/dell/bin/
> ./Client

連入 storage center
點選 Storage 頁籤 -- > 點選 Servers -- > 點選 Create Server


輸入 名稱以及 Notes
點選  Manually Add HBA


輸入 iqn 名稱( Client ) -- > 點選 OK



中間可能會出現警告訊息, 先把他新增完畢
可能會顯示為 All paths down, 先不用緊張




Client ( iSCSI Initiatior 這邊 ):

回到 client 這邊

再次觀察
# lsscsi
[0:0:0:0]    disk ATA    TS240GSSD220S 4AA   /dev/sda
[0:0:1:0]    disk ATA    TS240GSSD220S 4AA   /dev/sdb
[5:0:0:0]    cd/dvd HL-DT-ST DVD-ROM DTA0N    D100 /dev/sr0

啟動 yast  iscsi initiator
#yast2   iscsi-client

Service Start 點選 When Booting


點選 Connected Targets 頁籤
點選 Add



輸入 iSCSI Target  IP Address  -- > 點選  Next

出現相關資訊 -- > 點選 Connect

Startup 部份點選 automatic  -- > 點選  Next



點選 Next



點選 OK



# systemctl  status iscsi
● iscsi.service - Login and scanning of iSCSI devices
  Loaded: loaded (/usr/lib/systemd/system/iscsi.service; enabled; vendor preset: enabled)
  Active: active (exited) since Tue 2018-07-17 17:22:41 CST; 9min ago
    Docs: man:iscsiadm(8)
          man:iscsid(8)

# systemctl  is-enabled iscsi
enabled



Server ( iSCSI Target 這邊 ):

這個時候會觀察到 連線已經是 UP


接下來新增 Volume

點選 Volumes -- > 點選 Create Volume

輸入 名稱還有 Notes -- > 點選 Next



輸入 Volume 的大小 -- > 點選 Next



選取 Storage Options -- > 點選 Next


選取 Snapshot Profile -- > 點選 Next



選取 server ( client 機器 )  -- > 點選 Next


確認相關資訊 -- > 點選 Finish



Client ( iSCSI Initiatior 這邊 ):

回到 client 這邊

# lsscsi
[0:0:0:0]    disk ATA    TS240GSSD220S 4AA   /dev/sda
[0:0:1:0]    disk ATA    TS240GSSD220S 4AA   /dev/sdb
[5:0:0:0]    cd/dvd HL-DT-ST DVD-ROM DTA0N    D100 /dev/sr0

這邊感覺要讓他生效好像是要重新連接才會生效

# yast2  iscsi-client

將 iscsi target disconnect 再 connect

再次觀察
# lsscsi
[0:0:0:0]    disk ATA    TS240GSSD220S 4AA   /dev/sda
[0:0:1:0]    disk ATA    TS240GSSD220S 4AA   /dev/sdb
[5:0:0:0]    cd/dvd HL-DT-ST DVD-ROM DTA0N    D100 /dev/sr0
[7:0:0:1]    disk COMPELNT Compellent Vol   0702 /dev/sdc

磁碟出現了, 接下來就是呼叫  yast2 disk 格式化

# yast2  disk

使用 yast2 建立還有掛載目錄

重開機測試, 之後就可以使用 iSCSI 的空間了 :)

~ enjoy it

Reference:


週六
2018年06月16日


face
Portainer with openSUSE Leap 15 小記


OS:  openSUSE Leap 15


因為讀書會的關係, 接下來要練習 portainer


官方網站


下載 potainer image


# docker   image  pull  portainer/portainer


確認資訊


# docker  images
REPOSITORY            TAG IMAGE ID            CREATED SIZE
portainer/portainer   latest 50c62d83c09c        3 weeks ago 54.1MB


使用 docker run 來執行 portainer


# docker  run  -d  -p  9000:9000  -v  /var/run/docker.sock:/var/run/docker.sock  portainer/portainer


41c93d65b4dbb18b50089361e9f96f55b1615847fc564d98214994736c10060b

使用瀏覽器開啟  http://localhost:9000
設定 admin 的密碼
點選 Create user



選取連接的方式


因為是讀書會的關係, 先來嘗試 Local 的連接方式
但是這個部份要配合 -v /var/run/docker.sock:/var/run/docker.sock 才可以
點選 Connect



接下來就會出現漂亮的 dashboard




在 App Templates 有一些 template 可以供安裝



這邊嘗試使用 Nginx 來進行實驗
最簡單的方式就是輸入名稱
點選 Deploy the Container

這個時候就會在 Containers 這邊看到相關資訊
因為剛剛我們沒有特別指定 port, 所以就會隨機指定一個 port 到container 裡面的 port 80 / 443




點選 Container 的名字之後
可以使用圖示來進行 container 的基本操作
觀察 status, 使用終端機這類的操作



接下來嘗試另外一種建立 container 的方式


點選 Containers 裡面的 Add container



在設定的畫面中
這邊先嘗試只輸入名稱 以及 image name (這邊以 sakana/jupyterhub 為例子 )
點選 Deploy the container

因為沒有指定 port mapping 或是開啟 Publish all exposed ports
所以就不會 有 Published Ports




如果有開啟 Publish all exposed ports
就會隨機指定一個 port 給 Dockfile 內有指定 EXPOSE 的 port




---------------------------------


實驗完 Local 的方式, 接下來實驗 docker swarm 的連接


首先我是在 Azure 上面開了 3 台 openSUSE Leap 來建立 docker swarm


建立的方式很簡單


Manager node 使用 #docker  swarm  init  --advertise-addr  IP_ADDRESS 初始化
Worker node 使用 manager node 吐出來的 join 指令加入
  • 例如 # docker swarm  join     --token SWMTKN-1-5tq2mf503fj8oc1ehvuh0zybr8t2bxwzrlma1b0wokfj5kzc2m-eqixr308uwmhqso82bovb6hf5     10.0.0.4:2377


點選左邊的 Endpoints
點選 Add endpoint



在連接的畫面會看到
還剩下兩種方式
  • Docker
    • 這個要連接 Docker 主機的 api port
  • Portainer Agent
    • 這個我還沒有試過, 但是連接 port 9001



目前先嘗試 連接 docker
但是要先提到, 之前有發生 port 2375 暴露產生的漏洞, 所以 docker 官方是建議 使用 port 2376 + TLS


個人的想法是除了使用憑證以外, 還要使用 firewall 限制 ip 等等


但是因為是讀書會, 所以目前嘗試的方式是開啟 port 2375
作法參考網路上找到的方式


# vi   /usr/lib/systemd/system/docker.service
修改 ExecStart 的參數, 加入紅色的部份


ExecStart=/usr/bin/dockerd --containerd /run/containerd/containerd.sock --add-runtime oci=/usr/bin/docker-runc -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock $DOCKER_NETWORK_OPTIONS $DOCKER_OPTS
#ExecStart=/usr/bin/dockerd --containerd /run/containerd/containerd.sock --add-runtime oci=/usr/bin/docker-runc $DOCKER_NETWORK_OPTIONS $DOCKER_OPTS


# systemctl   daemon-reload


重新啟動 docker
# systemctl  restart  docker


檢查 參數
# ps -ef  | grep docker


#netstat  -tupln
tcp        0 0 :::2375                 :::*                    LISTEN 21501/dockerd  


接下來就到 portainer 上面輸入 名字 +  IP:2375
就可以了


成功之後
左上角就會出現 CHANGE ENVIRONMENT
就可以用下拉式選單選遠端的 docker



因為是使用 docker swarm
所以會有些差異, 例如 Services , Stacks 還有 Swarm



接下來就可以使用圖形界面來管理 docker swarm 以及遠端的 docker 了
:)


讀書會又前進一步


~ enjoy it


------------------------------

2018/6/16 更新

遠端連接的部份 port 2376 的部份
使用 DigitalOcean 來進行實驗
利用 docker-machine 指令來建立 DigitalOcean 的VM, 本質上就會在 port 2376 listen
然後 docker-machine 也會幫忙建立憑證與 key

連接的方式
輸入名稱 以及 Endpoint URL 記得 port 是 2376
選取 TLS with Client verification only ( 或是 skip server verification )
TLS certificate 用 ~/.docker/machine/certs/cert.pem
TLS Key 用 ~/.docker/machine/certs/key.pem
點選 Add endpoint


Reference:



週五
2018年06月15日


face
20180613

Transactional updates with kubic 小記

OS: openSUSE Tumbleweed Kubic

先解釋 Kubic

官方網站:
有一段說明
Container as a Service Platform based on Kubernetes atop openSUSE MicroOS

簡單來說就是以 openSUSE Tumbleweed 為 Base OS 來提供容器平台
  • 裡面有使用 openSUSE MicroOS (https://en.opensuse.org/Kubic:MicroOS ) 來針對容器使用最佳化, 使用 atomic 方式針對 read-only room filesystem 進行升級
  • 可以使用 docker and podman 來使用容器
  • 可以使用 Kubernetes 來進行容器叢集管理
  • openSUSE / SUSE 使用  velum ( https://github.com/kubic-project/velum  ) 來進行 cluster 架設, 詳細可以看 Github 的說明

所以要使用 kubic 的第一步就是要了解 atomic 方式更新, 因為 openSUSE MicroOS 是 read-only root filesystem
  • 無法直接用 zypper 安裝 套件
  • 要使用 transactional-update 指令安裝套件
    • 安裝完套件要 reboot 才會生效
    • 可以 rollback 回到 snapshot
  • 搭配 btrfs filesystem

想要了解 transactional-update 可以參考 openSUSE Conference 2018 這場演講

我擷取裡面的一張簡報
簡單來說就是進行變更的時候
  • 會將現在的檔案系統建立快照 ( pre )
  • 進行變更
  • 建立變更後的快照 ( post )
  • 要生效要重新開機

先來看看指令說明吧

# transactional-update  --help
Syntax: transactional-update [options] [general-command...] [package-command]
       transactional-update [options] individual-command

Applies modifications to the system to a new snapshot without touching
the running system.

General Commands:
cleanup            Mark removable snapshots
grub.cfg           Regenerate grub.cfg
bootloader         Reinstall the bootloader
initrd             Regenerate initrd
kdump              Regenerate kdump initrd
reboot             Reboot after update
shell              Open rw shell in snapshot before exiting
...

如果使用 zypper 來安裝套件, 會得到下列相關錯誤訊息
Error: Subprocess failed. Error: RPM failed: error: can't create transaction lock on /var/lib/rpm/.rpm.lock (Read-only file system)

所以要使用 transactional-update 指令來安裝套件, 這邊也用 traceroute 套件來示範

# transactional-update   pkg   in  traceroute
Checking for newer version.
transactional-update 2.3 started
Options: pkg in traceroute
Separate /var detected.
Creating read-only snapshot of current system state (#1)
Running in non UTF-8 locale. Setup is unsupported.
Copying /etc state into backup snapshot
Running in non UTF-8 locale. Setup is unsupported.
Copying /etc state into snapshot
Calling zypper install
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following NEW package is going to be installed:
 traceroute

1 new package to install.
Overall download size: 0 B. Already cached: 52.5 KiB. After the operation,
additional 103.5 KiB will be used.
Continue? [y/n/...? shows all options] (y):  Y
Checking for file conflicts: .............................................[done]
In cache traceroute-2.0.21-1.10.x86_64.rpm (1/1),  52.5 KiB (103.5 KiB unpacked)
(1/1) Installing: traceroute-2.0.21-1.10.x86_64 ..........................[done]
Trying to rebuild kdump initrd
Running in non UTF-8 locale. Setup is unsupported.
Please reboot your machine to activate the changes and avoid data loss.
transactional-update finished

這邊會提示要重開機才會生效

可以使用 findmnt 或是後面看到的 btrfs 指令來觀察目前的 snapshot

# findmnt   /
TARGET SOURCE                              FSTYPE OPTIONS
/      /dev/sda2[/@/.snapshots/1/snapshot] btrfs  ro,relatime,space_cache,subvolid=267,subvol=/@/.snapshots/1

使用 snapper  list 來觀察目前的快照

# snapper  list
Failed to set locale. Fix your system.
Running in non UTF-8 locale. Setup is unsupported.
Type   | # | Pre # | Date                     | User | Cleanup | Description  | Userdata
-------+---+-------+--------------------------+------+---------+-----------------------+--------------
single | 0 |       |        | root | | current              |
single | 1 |       | Wed Jun 13 13:45:15 2018 | root |         | first root filesystem |
single | 2 |       | Wed Jun 13 13:49:44 2018 | root | number  | after installation | important=yes
pre    | 3 |       | Wed Jun 13 15:03:33 2018 | root | number  | RO-Clone of #1 | important=yes
post   | 4 | 3     | Wed Jun 13 15:03:34 2018 | root |         | Snapshot Update |  

如果去執行 traceroue 指令, 會發現沒辦法執行, 因為還沒有生效

重開機來進行生效
# reboot

重開機之後可以使用 btrfs 指令觀察目前的 snapshot

# btrfs  subvolume  get-default   /
ID 274 gen 73 top level 266 path @/.snapshots/4/snapshot

如果要回到某個狀態 可以 使用 transactional-update  rollback 快照號碼

# transactional-update  rollback 1
transactional-update 2.3 started
Options: rollback 1
Separate /var detected.
Rollback to snapshot 1...
Running in non UTF-8 locale. Setup is unsupported.
Please reboot to finish rollback!

但是還是要重開機才會生效

這樣也算是跨出 kubic 一小步

~ enjoy it
Reference:


週六
2018年06月09日


face
flatpak with openSUSE Leap 15 小記

OS: openSUSE Leap 15

在 openSUSE Leap 15 發行的時候就注意到之前有在關注的幾個軟體安裝方式
Flatpak ,  Snap 以及 AppImage

我想接下來應用程式應該也會像 docker 一樣開始跨系統了
所以今天就來嘗試 Flatpak with openSUSE Leap 15

安裝 Flatpak 套件

# zypper  install    flatpak
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 7 NEW packages are going to be installed:
 flatpak libostree typelib-1_0-Flatpak-1_0 xdg-desktop-portal
 xdg-desktop-portal-gtk xdg-desktop-portal-gtk-lang xdg-desktop-portal-lang

The following recommended package was automatically selected:
 xdg-desktop-portal-lang

7 new packages to install.
Overall download size: 1.3 MiB. Already cached: 0 B. After the operation,
additional 4.7 MiB will be used.
Continue? [y/n/...? shows all options] (y): Y

# flatpak  --version
Flatpak 0.10.4

Flatpak 採取分散式的安裝軟體來源
我這邊是使用 https://flathub.org/home



相關選項可以使用  flatpak --help  觀察

這邊我來使用 slack 進行測試

首先要進行對 flathub.org 的設定

我按照上面的方式使用一般使用者來進行增加 repo 的動作, 但是還是會要求管理者權限
> flatpak  remote-add  --if-not-exists  flathub  https://flathub.org/repo/flathub.flatpakrepo

按照文件的要求, 重新啟動電腦

接下來嘗試安裝 slack
參考網站上面的資訊


使用 flatpak 指令進行安裝

# flatpak  install  flathub  com.slack.Slack
Required runtime for com.slack.Slack/x86_64/stable (org.freedesktop.Platform/x86_64/1.6) is not installed, searching...
Found in remote flathub, do you want to install it? [y/n]: Y


使用 flatpak 列出已經安裝的套件
# flatpak  list
Ref                                             Options
com.slack.Slack/x86_64/stable                   system,current
org.freedesktop.Platform.VAAPI.Intel/x86_64/1.6 system,runtime
org.freedesktop.Platform.ffmpeg/x86_64/1.6      system,runtime
org.freedesktop.Platform/x86_64/1.6             system,runtime

其實到套件清單已經可以偷偷看到 slack 已經安裝



以一般使用者執行
> flatpak  run  com.slack.Slack

或是點選剛剛的 slack 圖示也可以

接下來嘗試移除 slack

# flatpak   uninstall  com.slack.Slack
Uninstalling: com.slack.Slack/x86_64/stable


觀察 flatpak
# flatpak  list
Ref                                             Options
org.freedesktop.Platform.VAAPI.Intel/x86_64/1.6 system,runtime
org.freedesktop.Platform.ffmpeg/x86_64/1.6      system,runtime
org.freedesktop.Platform/x86_64/1.6             system,runtime

另外一種安裝方式是使用 .flatpakref 的方式
剛剛的 slack on flathub.org 有 INSTALL 按鈕
點選 INSTALL 按鈕就可以下載 .flatpakref 類型的檔案


下載之後, 在檔案總管中 按右鍵選擇使用 軟體( gnome-software ) 開啟



搜尋一下其實就會看到 slack
點選 安裝 按鈕


其實如果往下看會看到 來源是 dl.flathub.org

但是我想因為剛剛有把 flathub.org 加入flatpak 的repo
所以理論上 軟體 上面應該就會出現 flathub.org 上面有的軟體

再次確認
# flatpak  list
Ref                                             Options
com.slack.Slack/x86_64/stable                   system,current
org.freedesktop.Platform.VAAPI.Intel/x86_64/1.6 system,runtime
org.freedesktop.Platform.ffmpeg/x86_64/1.6      system,runtime
org.freedesktop.Platform/x86_64/1.6             system,runtime


這樣也算是跨出 flatpak 的第一步

~ enjoy it

Reference:


face
openSUSE Leap 15 正式版 安裝小記

這次也是使用 USB 來進行安裝, 上次裝 42.3 是 2017年11月 :)

== 安裝過程小記==

這次建立的時候我還是選擇 GNOME 桌面
磁碟區分割的部分, 預設的引導行為
  • 會建立一個 /boo/efi ( vfat )
  • / 一樣使用 btrfs
  • /home 使用 xfs ( 如果有勾選 )
  • 這次感受上是把 swap 的部分擴增( 視 RAM 的大小, 讓系統可以暫停 )

安裝的內容, 我雖然是選擇重新安裝, 但是還是有注意到 Leap 15 可以從之前的 Leap 42.3 輸入 SSH主機金鑰和組態
  • 安裝完驗證, 會把 /etc/ssh/*.pub 的金鑰用原來 Leap 42.3 的

===============

Notes
  • Ifconfig 預設沒有安裝, 要使用 ip  address show
  • 關閉GNOME裡面的搜尋功能, 因為我覺得用不到

中文輸入法問題:

因為就算以安裝 中文輸入法也沒有出現
  • 這次在系統內選擇中文輸入法有出現, 就先觀察 ibus 1.8
  • 要習慣的應該是以 system_key( windows ) + 空白鍵 切換輸入法
  • gcin 我一直都搞不定只好先用 ibus

取消 USB 為安裝來源
# yast2  repositories

Google Chrome:

還是會有驗證性問題, 但是功能沒有差異
為了進行google 登入,先處理yubikey 進行兩階段認證

Freemind:
使用one click install 安裝 http://software.opensuse.org/package/freemind
我是使用 editors 那個來源的 ymp 檔案安裝

安裝的頁面變得很漂亮

.mm 的檔案指定用 freemind  開啟

新增 Packman 套件庫:

使用 #yast2  repositories 加入社群版本的Packman

#yast2  repositories

NCHC Packman 套件庫目前還沒有進行同步 Leap 15, 所以先觀察

Firefox Sync:
登入 Firefox Sync, 會處理之前有下載的 Plugin

flash-player:
# zypper   install flash-player

播放器:

# zypper  install   vlc
因為 mplayber 與 smplayer 不知道為何播放 .mp4 有點問題, 但是使用 VLC 就沒有問題
所以我就安裝 VLC Media player

並將 .rmvb 以及 .mp4 預設播放器設定為  VLC

安裝  ffmpeg ( 會把提供者從 openSUSE 換成 Packman )
# zypper  install ffmpeg

這樣的好處是使用 youtube-dl  可以轉換 mp3 格式


透過 youtube-dl  -F 來觀察可以下載的格式

> youtube-dl  -F  http://www.youtube.com/watch?v=13eLHrDcb1k
[youtube] Setting language
[youtube] 13eLHrDcb1k: Downloading video webpage
[youtube] 13eLHrDcb1k: Downloading video info webpage
[youtube] 13eLHrDcb1k: Extracting video information
Available formats:
22 : mp4 [720x1280]
18 : mp4 [360x640]
43 : webm [360x640]
5 : flv [240x400]
17 : mp4 [144x176]

指定要下載的格式進行下載 (請注意 -f 是小寫)

> youtube-dl  -f  22  http://www.youtube.com/watch?v=13eLHrDcb1k

下載為 mp3
首先要安裝 ffmpeg 套件

>youtube-dl    http://www.youtube.com/watch?v=13eLHrDcb1k --extract-audio --audio-format mp3

PDF Viewer 安裝:
Foxit
之前42.3 的 PDF Viewer 中文顯示有問題所以使用 Foxit, Leap 15 中文預設沒問題, 但是也是順手裝起來

Skype:
目前的版本是 8.22.0.2 的版本


下載 RPM 版本用軟體安裝就裝好了 :)

使用 #yast2 sound 調整音效

Dropbox:

目前版本 2.10.0
使用 # zypper install dropbox 來安裝

安裝完之後在終端機下 dropbox  start -i 來安裝

修改 LS_OPTIONS 變數
# vi   /etc/profile.d/ls.bash
把 root 的 LS_OPTIONS 的 -A 移除

.7z 支援:
# zypper  install p7zip

imagewriter:
# zypper  install imagewriter
用來製作開機 USB

hexchat:
# zypper  install hexchat


以下為個人記事

rdesktop 安裝與測試:
#zypper  install freerdp

執行方式
#xfreerdp  -g 1280x1024  -u administrator  HOST_IP


VMware workstation Pro 14:

安裝 kernel-default-devel  
# zypper   install   kernel-default-devel
# ./VMware-Workstation-Full-14.0.0-6661328.x86_64.bundle

取消 “Enable virtual machine sharing and remote access

2017-11-13 20-45-20 的螢幕擷圖.png

Yubico Key:
如果 linux 沒有抓到 Yubico 的 U2F Key可以使用以下步驟
讓 linux 支援 Yubico , 我是參考 https://www.yubico.com/faq/enable-u2f-linux/  
作法
存到 /etc/udev/rules.d/70-u2f.rules
將 linux 重開機, 接下來就可以使用了 :-)

smartgit 安裝:

下載 smartgit-linux-18_1_2.tar.gz

解壓縮到 /opt
# tar  zxvf   smartgit-linux-18_*.tar.gz  -C   /opt/

建立 link 讓一般使用者也能使用
# ln  -s   /opt/smartgit/bin/smartgit.sh   /usr/local/bin/smartgit

安裝 git
# zypper  install  git

建立 個人的 ssh key
> ssh-keygen  -t dsa

將 ssh 的公鑰 id_dsa.pub 新增到 Github 的 Settings -- >  SSH and GPG Keys

接下來就是以一般使用者的身份執行 smartgit 指令
> smartgit

這次一般使用者發生找不到 jre 路徑

解法, 目前是在 ~/.smartgit/smartgit.vmoptions 檔案內
將 jre 指向 /opt/smartgit/jre

> cat   ~/.smartgit/smartgit.vmoptions
jre=/opt/smartgit/jre


按照上面的參考設定

設定 smart git icon 使用 alacarte

在設定好之後如果發現無法直接開啟資料夾 ( 資料夾上面按右鍵 -- > Open )
Edit -- > Preferences --> 點選  Tools -- > 點選 Re-Add Defaults 得到解決
2016-11-24 15-48-28 的螢幕擷圖.png

ansible 安裝:

目前版本 2.5.1
#zypper  install ansible

安裝 pysphere:

為了 ansible and VMware Module

使用 one-click 安裝

使用 server:monitoring 套件那個安裝

Docker 安裝:

目前版本 17.09.1-ce
#zypper  install docker

#systemctl  start docker
#systemctl  enable docker

GNOME Extension:

參考調校小記
裝了
  • TopIcon
  • NetSpeed

Forticlient SSL VPN 安裝:
Dropbox 內2017/packages 的 source code

使用 forticlientsslvpn_linux_4.4.2323.tar.gz 內的 fortisslvpn.sh

印表機安裝:
# yast2  printer


~ enjoy it

參考

週六
2018年04月21日


face
利用 Ansible playbook 建立 azure 與 ansible套件於 openSUSE & Ubuntu Linux

之前的文章在測試  Azure Dynamic Inventory 的時候, azure 與 ansible 環境是手動建立的.

所以順手寫了一個 azure_install.yml 的 playbook
  • 針對 hosts 檔案內的群組[ AzureHost ]  進行相關套件安裝, 所以只要把主機加入該群組就好

處理內容如下
  • 安裝 Azure python SDK
  • 安裝 ansible 套件然後不能跟 python 衝突( 符合 python 套件需要 )
  • 下載 azure_rm.py
  • 建立空檔案 ~/.azure/credentials 方便日後輸入認證資訊


azure_install.yml 檔案內容如下

---
#########################################################  
# Install docker package and setup boot
- name: use when conditionals and setup module (facts)
 hosts: all
 tasks:
# 使用 setup moudule 列出 OS 種類
   - name: use setup module to list os distribution
# setup moudle 可以使用 filter 過濾相關內容
     setup: filter=ansible_distribution


#########################################################  

- name: Install python-pip and azure package
# use group
 hosts: AzureHost
#  sudo: True
 become: True
 tasks:
   - name: Install python-pip with openSUSE Leap
# 這邊使用 disable_recommends=no 加入zypper 建議的套件, 否則不會加入 apache2等其他套件
# 這邊使用 disable_gpg_check=yes, 讓公有雲例如 azure上面的額外 repo 不用check gpg key
     zypper: name={{ item }} disable_recommends=no disable_gpg_check=yes
     with_items:
       - python-pip
       - curl
       - wget
       - sshpass
     when: ansible_distribution == "openSUSE Leap"

   - name: Install python-pip with Ubuntu
     apt: name={{ item }} update_cache=yes
     with_items:
       - python-pip
       - curl
       - wget
       - sshpass
     when: ansible_distribution == "Ubuntu"

   - name: upgrade pip version
     pip:
       name: pip
       state: latest
# 這邊透過 executable 來指定使用 pip2, 不然預設是 pip3
       executable: pip2   

   - name: install ansible[azure] with pip
     pip:
       name: ansible[azure]
# 這邊透過 executable 來指定使用 pip2, 不然預設是 pip3
       executable: pip2   

# 下載 azure_rm.py, 以便日後 Dynamic Inventory 使用
   - name: get azure_rm.py to root home
     get_url:
       url: https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/azure_rm.py
       dest: /root/azure_rm.py
       mode: 0551
# 建立 ~/.azure 目錄
   - name: create ~/.azure folder
     file:
       path: ~/.azure
       state: directory
# 建立 ~/.azure/credentials 檔案,之後要存放 azure 認證檔案
   - name: create ~/.azure/credentials
     file:
       path: ~/.azure/credentials
       state: touch

#-------------------------------------------------------  


執行方式

如果是在 Azure 上面的 VM 執行
$ ansible-playbook   --ask-pass  --ask-become-pass  -u  使用者名稱   azure_install.yml

如果是一般 VM 可能就可以直接用 root 連接, 不用 --ask-become-pass :)

偷懶戰鬥力 又偷偷 + 1

~ enjoy it

Reference:


週六
2018年04月07日


face
Docker-machine 與 digital ocean 小記


OS:  openSUSE Leap 42.3


因為讀書會的關係, 進入 Chapter 5 docker-machine
所以接下來進行 docker-machine 實驗


就目前的了解, 就是可以使用 docker-machine 來進行本機或是遠端的docker 安裝.
Docker Machine is a tool that lets you install Docker Engine on virtual hosts, and manage the hosts with docker-machine commands.
You can use Machine to create Docker hosts on your local Mac or Windows box, on your company network, in your data center, or on cloud providers like Azure, AWS, or Digital Ocean.




( 謎之音: 但是這個部份好像你都是用 ansible 解決掉了 ... )


參考官方網站


先來進行 docker-machine 的安裝
Docker-machine 官方 github, 目前是 0.14 版


下載 docker-machine
# curl -L https://github.com/docker/machine/releases/download/v0.14.0/docker-machine-`uname -s`-`uname -m` >  /tmp/docker-machine


  • uname 指令, 上面兩個指令結果會跑出 Linux 以及 x86_64
    • -s, --kernel-name        print the kernel name
    • -m, --machine            print the machine hardware name


使用 install 指令將 docker-machine 複製到 /usr/local/bin 下
# install    /tmp/docker-machine  /usr/local/bin/docker-machine


這樣就安裝完成了


還沒開始之前先觀察一下


# docker-machine   ls
NAME   ACTIVE  DRIVER STATE   URL SWARM DOCKER   ERRORS


接下來就是 docker-machine 與 digital ocean 的實驗


開始之前, 必須先要有 digital ocean 的 API, 可以參考


接下來就可以測試 docker-machine 指令了


# docker-machine  create  --driver digitalocean  --digitalocean-access-token 599122321a3b75aea39f07c3XXXXXXXXX52911013806421589763bdd667e511 docker-machine-test


Creating CA: /root/.docker/machine/certs/ca.pem
Creating client certificate: /root/.docker/machine/certs/cert.pem
Running pre-create checks...
Creating machine...
(docker-machine-test) Creating SSH key...
(docker-machine-test) Creating Digital Ocean droplet...
(docker-machine-test) Waiting for IP address to be assigned to the Droplet...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with ubuntu(systemd)...
Installing Docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env docker-machine-test


  • 重點在 --driver 選擇要建立的 host 種類
  • 會在 digital ocean 建立一個 droplet 名稱為 docker-machine-test
  • 看他的行為是透過 SSH 與憑證來控管


可以在 Digital Ocean 的 dashboard 上面觀察




再次觀察


# docker-machine   ls
NAME                  ACTIVE DRIVER  STATE URL              SWARM DOCKER ERRORS
docker-machine-test   - digitalocean  Running tcp://XXX.YYY.ZZ.WWW:2376           v18.03.0-ce   


觀察 Host IP
# docker-machine  ip docker-machine-test


查看相關資訊
# docker-machine   inspect  docker-machine-test


  • 這邊可能要注意的是 docker-machine 會把相關的資訊存在 ~/.docker/machine/machines/主機名稱/config.json


接下來使用 docker-machine  env 來觀察相關環境變數


# docker-machine  env docker-machine-test
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST=" tcp://XXX.YYY.ZZ.WWW:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/docker-machine-test"
export DOCKER_MACHINE_NAME="docker-machine-test"
# Run this command to configure your shell:
# eval $(docker-machine env docker-machine-test)


按照上面建議的 eval $(docker-machine env docker-machine-test) 去執行相關變數


# eval   $(docker-machine  env docker-machine-test)


觀察相關資訊
# echo   $DOCKER_TLS_VERIFY
1


# echo $DOCKER_HOST
tcp://XXX.YYY.ZZ.WWW:2376


# echo $DOCKER_MACHINE_NAME
docker-machine-test


這個時候如果下 docker  images 就會發現已經是在遠端 droplet 了 ( 因為是空的 …. )


# docker  images
REPOSITORY          TAG IMAGE ID            CREATED SIZE


進行相關測試


# docker  run   -d  -p  80:80  --name   demo  yeasy/simple-web


開啟 Droplet 的網頁觀察




成功 :)


接下來練習  docker-machine  stop 停止 droplet
# docker-machine  stop  docker-machine-test


Stopping "docker-machine-test"...
Machine "docker-machine-test" was stopped.


在 Digital Ocean Dashboard 觀察


# docker-machine  rm  docker-machine-test
About to remove docker-machine-test
WARNING: This action will delete both local reference and remote instance.
Are you sure? (y/n): y
Successfully removed docker-machine-test


  • 會把 ~/.docker/machine/machines 下面的主機相關設定移除
  • 也會移除 Digital Ocean 上面的 Droplet


好了, 可以繼續看第五章了
~ enjoy  it


Reference

週三
2018年04月04日


face

Ansible azure module - 利用 Dynamic inventory 建立 nagios server 與 client

上一篇文章實驗 azure Dynamic Inventory 來取得目前 Azure 上面所有主機

那麼有了這些資訊, 我們是不是就可以利用這個特性,
將 Azure 上面的機器按照不同的群組來進行不同的設定呢?  
答案是可以的  :)
接下來進行相關實驗

OS:  openSUSE Leap 42.3 in Azure

預計達成目標

Nagios Server x 1
  • openSUSE Leap 42.3
  • 使用標籤  NagiosServer

Nagios Client   x 2
  • openSUSE Leap 42.3
  • 使用標籤 NagiosClient

跟之前的建立 Azure VM with Ansible 不同的是,
這次在建立VM的時候我們會加上 Tag (標籤) 的選項

建立 Azure with Tag VM 的 playbook 可以參考我的 Github

azure_create_tag_vm.yml 相關內容如下

---
# Azure VM 相關測試
# edit by sakana 2018/2/17
- name: use when conditionals and setup module
 hosts: localhost
 connection: local
#
 vars_prompt:
   - name: "resource_group"
     prompt: "Enter resource group name"
     private: no
     default: sakanatest

   - name: "admin_username"
     prompt: "Enter admin username"
     private: no
     default: sakana

   - name: "admin_password"
     prompt: "Enter admin password"
     private: yes

   - name: "vm_tags"
     prompt: "Enter VM Tag, like test=01"
     private: no

     
   - name: "sequence_start"
     prompt: "Enter sequence start number"
     private: no
     default: 1

   - name: "sequence_end"
     prompt: "Enter sequence end number, Max is 99"
     private: no
     default: 10

   - name: "vm_size"
     prompt: "Enter VM size"
     private: no
     default: Basic_A1

   - name: "image_offer"
     prompt: "Enter image offer"
     private: no
     default: openSUSE-Leap

   - name: "image_publisher"
     prompt: "Enter image publisher"
     private: no
     default: SUSE

   - name: "image_sku"
     prompt: "Enter image sku"
     private: no
     default: 42.3

   - name: "image_version"
     prompt: "Enter image version"
     private: no
     default: latest

 tasks:
  - name: Create Azure test VM
# 可以用 with_sequence 方式, %0x 為序號, x是16進制, 所以我用 u 10進制
# 如果是 %02x 就是 2位數, 例如 server00
# 如果只設定 server%0x , 但是超出1位數, 例如 1 to 10, 最後一個會變成 servera
# stride=2 代表間隔是 2
#      with_sequence: start=1 end=10 stride=1 format=server%02u
    with_sequence: start={{ sequence_start }} end={{ sequence_end }} stride=1 format=test%02u
    azure_rm_virtualmachine:
      resource_group: "{{ resource_group }}"
# 這邊的 "{{ item }}" 對應到上面的 with_sequence
      name: "{{ item }}"
      admin_username: "{{ admin_username }}"
      admin_password: "{{ admin_password }}"
# 這邊可以對應到已經有的儲存體
# 建立VM的時候會對應到儲存體, 如果只是實驗用, 可以對應到已經存在的儲存體
# 好處是移除的時候不用再手動移除
# 這個 storage_account 是已經建立好的, 請對應到已經存在儲存體
#       storage_account: sakanatestdiag34
      storage_account: sakanatestdiag340
# tag 實驗
      tags: "{{ vm_tags }}"


# 經實驗 vm_size 是必須的
      vm_size: "{{ vm_size }}"
#
# image 相關資訊可以使用 az vm image list --output table 查詢
      image:
        offer: "{{ image_offer }}"
        publisher: "{{ image_publisher }}"
        sku: "{{ image_sku }}"
        version: "{{ image_version }}"
#


建立 Nagios Server 與 Nagios Client 使用之前建立的 playbook

可以將目錄以及相關直接從 Github 上面直接下載下來

首先來建立 Nagios Server

使用上面的 azure_create_tag_vm.yml
  • 這邊在詢問 VM Tag 的時候請輸入 Tag名稱=值, Tag名稱要符合等等要執行的 ansible playbook 設定, 這邊設定為 NagiosServer

$ ansible-playbook   azure_create_tag_vm.yml
[WARNING]: Unable to parse /etc/ansible/hosts as an inventory source

[WARNING]: No inventory was parsed, only implicit localhost is available

[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'

Enter resource group name [sakanatest]:
Enter admin username [sakana]:
Enter admin password:
Enter VM Tag, like test=01: NagiosServer=01
Enter sequence start number [1]:
Enter sequence end number, Max is 99 [10]: 1
Enter VM size [Basic_A1]:
Enter image offer [openSUSE-Leap]:
Enter image publisher [SUSE]:
Enter image sku [42.3]:
Enter image version [latest]:

PLAY [use when conditionals and setup module] **********

建立完成可以到虛擬機器觀察
上面會出現 NagiosServer:01 的資訊



建立 2 台 Nagios Client

使用上面的 azure_create_tag_vm.yml
  • 這邊在詢問 VM Tag 的時候請輸入 Tag名稱=值, Tag名稱要符合等等要執行的 ansible playbook 設定, 這邊設定為 NagiosClient

$ ansible-playbook  azure_create_tag_vm.yml
[WARNING]: Unable to parse /etc/ansible/hosts as an inventory source

[WARNING]: No inventory was parsed, only implicit localhost is available

[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'

Enter resource group name [sakanatest]:
Enter admin username [sakana]:
Enter admin password

週六
2018年03月10日


face
Docker 讀書心得小記 - Resource limit - Memory limit

OS: openSUSE Leap 42.3 in Azure


根據書上的練習, 要針對 container 來進行 cpu 與 memory 的限制

# docker  run  -d  --name nginx-test  --cpu-shares  512  --memory 128M  -p 8080:80  nginx

WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.
77af042d43b9e19cab169c369de3f47b0011bf1677df76c40d0df4536581cd5c

Swap limit 搜尋了一下解法要去修改   /etc/default/grub
GRUB_CMDLINE_LINUX加入 cgroup_enable=memory swapaccount=1


openSUSE Leap 42.3 in Azure 的 /etc/default/grub

GRUB_DISTRIBUTOR=openSUSE-Leap-42.3-Azure\ \[\ VMX\ \]
GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_CMDLINE_LINUX=" root=/dev/disk/by-uuid/1c5711ac-7841-42e0-9517-88997b16cd30 disk=/dev/sda resume=swap USE_BY_UUID_DEVICE_NAMES=1 earlyprintk=ttyS0 console=ttyS0 rootdelay=300 net.ifnames=0 quiet"
GRUB_TERMINAL=gfxterm
GRUB_GFXMODE=800x600
GRUB_GFXPAYLOAD_LINUX=keep
GRUB_THEME="/boot/grub2/themes/openSUSE/theme.txt"
GRUB_BACKGROUND="/boot/grub2/themes/openSUSE/background.png"

我桌機的 openSUSE Leap 42.3 的 /etc/default/grub

# cat /etc/default/grub | egrep -v '^#|^$'

GRUB_DISTRIBUTOR=
GRUB_DEFAULT=saved
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=8
GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/sda1 splash=silent quiet showopts"
GRUB_CMDLINE_LINUX=""
GRUB_TERMINAL="gfxterm"
GRUB_GFXMODE="auto"
GRUB_BACKGROUND=/boot/grub2/themes/openSUSE/background.png
GRUB_THEME=/boot/grub2/themes/openSUSE/theme.txt
SUSE_BTRFS_SNAPSHOT_BOOTING="true"
GRUB_DISABLE_OS_PROBER="false"
GRUB_ENABLE_CRYPTODISK="n"
GRUB_CMDLINE_XEN_DEFAULT="vga=gfx-1024x768x16"



修改後的
openSUSE Leap 42.3 in Azure 的 /etc/default/grub

GRUB_DISTRIBUTOR=openSUSE-Leap-42.3-Azure\ \[\ VMX\ \]
GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_CMDLINE_LINUX=" root=/dev/disk/by-uuid/1c5711ac-7841-42e0-9517-88997b16cd30 disk=/dev/sda resume=swap USE_BY_UUID_DEVICE_NAMES=1 earlyprintk=ttyS0 console=ttyS0 rootdelay=300 net.ifnames=0 quiet cgroup_enable=memory swapaccount=1"
GRUB_TERMINAL=gfxterm
GRUB_GFXMODE=800x600
GRUB_GFXPAYLOAD_LINUX=keep
GRUB_THEME="/boot/grub2/themes/openSUSE/theme.txt"
GRUB_BACKGROUND="/boot/grub2/themes/openSUSE/background.png"

然後如何更新 grub2 呢?
update-grub 不是 openSUSE 內的指令( 應該是 ubuntu 那邊的 )
要使用 grub2-mkconfig  -o  /boot/grub2/grub.cfg 這樣的指令方式來更新 grub

更新之前先觀察 grub.cfg 內有沒有 cgroup 設定
# grep  cgroup  /boot/grub2/grub.cfg

然後把設定檔備份下來等等比較

# cp   /boot/grub2/grub.cfg   /boot/grub2/grub.cfg.bak

接下來更新 grub.cfg

# grub2-mkconfig  -o  /boot/grub2/grub.cfg
Generating grub configuration file ...
Found theme: /boot/grub2/themes/openSUSE/theme.txt
Found linux image: /boot/vmlinuz-4.4.104-39-default
Found initrd image: /boot/initrd-4.4.104-39-default
done

再次觀察設定, 這個時候就會發現剛剛寫在 /etc/default/grub 的設定更新到 grub.cfg 了
# grep   cgroup   /boot/grub2/grub.cfg
linux /boot/vmlinuz-4.4.104-39-default root=UUID=1c5711ac-7841-42e0-9517-88997b16cd30  root=/dev/disk/by-uuid/1c5711ac-7841-42e0-9517-88997b16cd30 disk=/dev/sda resume=swap USE_BY_UUID_DEVICE_NAMES=1 earlyprintk=ttyS0 console=ttyS0 rootdelay=300 net.ifnames=0 quiet cgroup_enable=memory swapaccount=1
linux /boot/vmlinuz-4.4.104-39-default root=UUID=1c5711ac-7841-42e0-9517-88997b16cd30  root=/dev/disk/by-uuid/1c5711ac-7841-42e0-9517-88997b16cd30 disk=/dev/sda resume=swap USE_BY_UUID_DEVICE_NAMES=1 earlyprintk=ttyS0 console=ttyS0 rootdelay=300 net.ifnames=0 quiet cgroup_enable=memory swapaccount=1
linux /boot/vmlinuz-4.4.104-39-default root=UUID=1c5711ac-7841-42e0-9517-88997b16cd30  root=/dev/disk/by-uuid/1c5711ac-7841-42e0-9517-88997b16cd30 disk=/dev/sda resume=swap USE_BY_UUID_DEVICE_NAMES=1 earlyprintk=ttyS0 console=ttyS0 rootdelay=300 net.ifnames=0 quiet cgroup_enable=memory swapaccount=1

重新開機讓他生效

# reboot

重新嘗試執行 docker run 加上限制
# docker  run  -d  --name nginx-test  --cpu-shares  512  --memory 128M  -p 8080:80  nginx

9b49816193d4513dc3d52ef079c2d360ffc6b3ea559fa66bdcee51c31e548807

透過 docker  stats 觀察
發現該 container 記憶體的部份就有 128MiB 限制了

# docker  stats

CONTAINER           CPU % MEM USAGE / LIMIT   MEM % NET I/O BLOCK I/O           PIDS
9b49816193d4        0.00% 9.078MiB / 128MiB   7.09%               1.3kB / 0B 8.04MB / 0B         2

想要實驗是否真的會限制到那個量

所以使用另外一個視窗 啟動 opensuse 的 container 並限制 128M 記憶體

# docker  run -d  -it --cpu-shares 512 --memory 128M opensuse /bin/bash

使用 docker exec 指令呼叫另外一個 /bin/bash
# docker

週五
2018年03月02日


face
20180302

Yast2 with openSUSE Leap 42.3 in Azure 小記

OS: openSUSE Leap 42.3 in Azure

我想 openSUSE / SUSE 與其他 linux 一個很大的不同點就是

他有 yast2 的圖形管理介面



文字管理介面 yast 很方便
但是有時候針對一些要選取的 item 很多的時候, 例如軟體管理, 或是伺服器管理
那真的是圖形介面比較好用.


想到系統是否用圖形介面, 大家會如何判斷呢?

早期在 System V 的時代, 大家應該是用 runlevel 指令吧

# runlevel
N 5

上面的指令會告訴我們目前是使用 runlevel 5 來運作, 所以會判斷可能是有圖形環境的
我也是在 Azure 上面下了 runlevel 指令, 加上下面會談到的認知, 產生錯覺, 以為 Azure 上面的 openSUSE VM 是有圖形環境的.


那目前在 systemd 的環境下如何判斷呢?
可以使用 ls -l 觀察  /etc/systemd/system/default.target
# ls  -l   /etc/systemd/system/default.target
lrwxrwxrwx 1 root root 40 Jul 21  2017 /etc/systemd/system/default.target -> /usr/lib/systemd/system/graphical.target

以我的桌機來說, 目前 default.target 就指向 graphical.target 也就是圖形介面
然後與原來 system v 對照可以觀察

# ls  -l   /usr/lib/systemd/system/runlevel*.target
lrwxrwxrwx 1 root root 15 Feb 28 19:44 /usr/lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx 1 root root 13 Feb 28 19:44 /usr/lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx 1 root root 17 Feb 28 19:44 /usr/lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx 1 root root 17 Feb 28 19:44 /usr/lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx 1 root root 17 Feb 28 19:44 /usr/lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx 1 root root 16 Feb 28 19:44 /usr/lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx 1 root root 13 Feb 28 19:44 /usr/lib/systemd/system/runlevel6.target -> reboot.target
所以我才會下了 runlevel 看到 5 就會以為是有圖形介面基礎的錯覺
但是人生就是很多 But
But in Azure ….. openSUSE Leap 42.3 VM
沒有 /etc/systemd/system/default.target

然後觀察 /etc/systemd/system/default.target.wants/ 指向兩個 service
 
# ls  -l  /etc/systemd/system/default.target.wants/
total 0
lrwxrwxrwx 1 root root 47 Jan 14 19:25 YaST2-Firstboot.service -> /usr/lib/systemd/system/YaST2-Firstboot.service
lrwxrwxrwx 1 root root 50 Jan 14 19:25 YaST2-Second-Stage.service -> /usr/lib/systemd/system/YaST2-Second-Stage.service

觀察他們的內容

# cat  /usr/lib/systemd/system/YaST2-Firstboot.service

[Unit]
Description=YaST2 Firstboot
After=apparmor.service local-fs.target plymouth-start.service YaST2-Second-Stage.service
Before=getty@tty1.service serial-getty@ttyS0.service serial-getty@ttyS1.service serial-getty@ttyS2.service
Before=display-manager.service
ConditionPathExists=/var/lib/YaST2/reconfig_system

[Service]
Type=oneshot
Environment=SYSTEMCTL_OPTIONS=--ignore-dependencies TERM=linux
ExecStartPre=-/usr/bin/plymouth quit
ExecStartPre=-/usr/bin/plymouth --wait
ExecStart=/usr/lib/YaST2/startup/YaST2.Firstboot
ExecStartPost=/usr/bin/rm -f /var/lib/YaST2/reconfig_system
ExecStartPost=/usr/bin/systemctl restart systemd-vconsole-setup.service
TimeoutSec=0
RemainAfterExit=true
StandardInput=tty

[Install]
WantedBy=default.target


# cat   /usr/lib/systemd/system/YaST2-Second-Stage.service | grep  -v  '^#'

[Unit]
Description=YaST2 Second Stage
After=apparmor.service local-fs.target plymouth-start.service
Before=getty@tty1.service serial-getty@ttyS0.service serial-getty@ttyS1.service serial-getty@ttyS2.service
Before=display-manager.service
ConditionPathExists=/var/lib/YaST2/runme_at_boot

[Service]
Type=oneshot
Environment=SYSTEMCTL_OPTIONS=--ignore-dependencies TERM=linux PX_MODULE_PATH=""
ExecStartPre=-/bin/sh -c 'if [ -x /usr/bin/plymouth ] ; then if [ `/usr/bin/systemctl get-default` = "multi-user.target" ];then /usr/bin/plymouth quit; else /usr/bin/plymouth deactivate --hide-splash; fi; fi'
ExecStart=/usr/lib/YaST2/startup/YaST2.Second-Stage
RemainAfterExit=yes
TimeoutSec=0
ExecStartPost=/bin/sh -c '/usr/bin/printf "\033c" > /dev/tty1'
ExecStartPost=/usr/bin/rm -f /var/lib/YaST2/runme_at_boot
ExecStartPost=/usr/bin/systemctl restart systemd-vconsole-setup.service
StandardInput=tty

[Install]
WantedBy=default.target

沒有啟動 display-manager.service 的念頭 ……..

另外也有可能從這邊發現到 ( 至少我是從這邊發現到的 …  )

使用 yast2 軟體管理功能( 目前當然只會出現文字介面 )
#yast2  sw_single

切換上面的 Filter 到 Patterns
就會發現 X Window System 根本沒有裝, 怎麼 yast2 ….



接下來就做個實驗吧
選取 GNOME Base System

週日
2018年02月25日


face
tmate with openSUSE Leap 42.3
使用 tmate 即時分享終端機

OS:  openSUSE Leap 42.3 in Azure

之前在社群舉辦活動的時候, 使用 OBS Studio ( https://obsproject.com/  ) 來進行活動直播
那個時候就有思考, 如何即時分享講者的終端機操作

那個時候找到 tmate 這個軟體
  • 官方網站 https://tmate.io/
  • 可以即時以 SSH 或是 Web 方式分享終端機
  • 可以指定 Read-only 方式連線 SSH 或是 Web終端機

首先搜尋套件 tmate

# zypper  search   tmate
Loading repository data...
Reading installed packages...

S | Name  | Summary                  | Type   
--+-------+--------------------------+--------
 | tmate | Instant terminal sharing | package

安裝 tmate 套件

# zypper  install  tmate
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 3 NEW packages are going to be installed:
 libmsgpackc2 libssh4 tmate

3 new packages to install.
Overall download size: 412.6 KiB. Already cached: 0 B. After the operation, additional 1.0 MiB will be used.
Continue? [y/n/...? shows all options] (y): y

因為 tmate 是透過 ssh 跟官網那邊進行連線, 所以要先建立 SSH 金鑰
先觀察目錄

# ls -a  ~
.  ..  .bash_history  .gnupg  bin

用 ssh-keygen 指令建立 SSH 金鑰
預設放在家目錄 ~/.ssh 目錄內 , 這邊是以 DSA 為例

# ssh-keygen  -t  dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
SHA256:exF8nA9WJ+arFCxZitM73rlJhv8zSLwozlFrFQyAnZ8 root@test01
The key's randomart image is:
+---[DSA 1024]----+
|       o.o. . + .|
|      . o+ O = o |
|        o.B.@ .  |
|         .E* = . |
|        S =.o o  |
|         + Ooo   |
|        o *o*o   |
|       ..+.+ooo  |
|       .o.  +..o |
+----[SHA256]-----+


再次觀察目錄

# ls  -a  ~/.ssh
.  ..  id_dsa  id_dsa.pub


執行 tmate 指令啟動 tmate
# tmate

這個時候其實可以觀察 /tmp 目錄
底下應該有 tmate相關目錄

# ls   /tmp/
.ICE-unix  .Test-unix  .X11-unix  .XIM-unix  .font-unix  tmate-0

如果有在執行tmate的時候, 該目錄底下會有 socket 檔案
# ls -l   /tmp/tmate-0/
total 0
srwxrwx--- 1 root root 0 Feb 25 07:37 bm33KG

使用 tmate  show-messates 顯示連線相關資訊

# tmate  show-messages
Sun Feb 25 06:40:13 2018 [tmate] Connecting to ssh.tmate.io...
Sun Feb 25 06:40:13 2018 [tmate] Note: clear your terminal before sharing readonly access
Sun Feb 25 06:40:13 2018 [tmate] web session read only: https://tmate.io/t/ro-x0iPdPMpfkFxXa8UPQmLUnPEH
Sun Feb 25 06:40:13 2018 [tmate] ssh session read only: ssh ro-x0iPdPMpfkFxXa8UPQmLUnPEH@ny2.tmate.io
Sun Feb 25 06:40:13 2018 [tmate] web session: https://tmate.io/t/H7FQW5vPlqKEVnCUMXKnSd2QS
Sun Feb 25 06:40:13 2018 [tmate] ssh session: ssh H7FQW5vPlqKEVnCUMXKnSd2QS@ny2.tmate.io

分享之前記得清畫面 :p

這邊會看到有分 web session read only, web session還有 ssh session read only 以及 ssh session.

差異只在是否可以操作指令

Web session 部份只要在瀏覽器開啟連結就好
例如


SSH Session 部份也是在終端機按照連結連線即可

先記下來

~ enjoy it


Reference:




週六
2018年02月24日


face
Acct with openSUSE Leap 42.3

OS: openSUSE Leap 42.3 in Azure

之前看到的文章, How to Monitor User Activity with psacct or acct Tools
今天找機會來實作一下

先搜尋相關套件
在 openSUSE 這邊是 acct 套件

# zypper  search   acct
Loading repository data...
Reading installed packages...

S | Name                     | Summary                                                | Type      
--+--------------------------+--------------------------------------------------------+-----------
 | acct                     | User-Specific Process Accounting                       | package   

安裝 acct 套件

# zypper  install  acct
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following NEW package is going to be installed:
 acct

1 new package to install.
Overall download size: 65.7 KiB. Already cached: 0 B. After the operation, additional 161.1 KiB will be used.
Continue? [y/n/...? shows all options] (y): Y

確認服務狀態

# systemctl   status  acct.service
● acct.service - Process accounting
  Loaded: loaded (/usr/lib/systemd/system/acct.service; disabled; vendor preset: disabled)
  Active: inactive (dead)
    Docs: man:accton(8)

啟動 acct 服務

# systemctl  start  acct.service

再次觀察服務

# systemctl   status   acct.service
● acct.service - Process accounting
  Loaded: loaded (/usr/lib/systemd/system/acct.service; disabled; vendor preset: disabled)
  Active: active (exited) since Sat 2018-02-24 11:29:28 UTC; 3s ago
    Docs: man:accton(8)
 Process: 21556 ExecStart=/usr/sbin/accton /var/log/account/pacct (code=exited, status=0/SUCCESS)
 Process: 21552 ExecStartPre=/usr/bin/chmod 600 /var/log/account/pacct (code=exited, status=0/SUCCESS)
Main PID: 21556 (code=exited, status=0/SUCCESS)

設定開機啟動

# systemctl  enable  acct.service
Created symlink from /etc/systemd/system/multi-user.target.wants/acct.service to /usr/lib/systemd/system/acct.service.

確認相關設定

# systemctl  is-enabled  acct.service
enabled

參考網路上找到的 ac 指令 man page

# ac  --help
               Usage: ac [-dhpVy] [-f <file>] [people] ...
               [--daily-totals] [--individual-totals] [--file <file>]
               [--complain] [--reboots] [--supplants] [--timewarps] [--print-year]
               [--compatibility] [--print-zeros] [--debug] [--tw-leniency <value>]
               [--tw-suspicious <value>] [--version] [--help]

The system's default login accounting file is /var/log/wtmp

ac 是使用 /var/log/wtmp 來進行相關資訊報告
  • ac prints out a report of connect time (in hours) based on the logins/logouts in the current wtmp file. A total is also printed out.

wtmp 檔案如果用 vim 或是 cat 方式, 是人類看不懂的, 在網路上面搜尋之後, 是使用 last 指令來觀察

# last  -f   /var/log/wtmp
sakana   pts/0        110.50.148.40    Sat Feb 24 12:13   still logged in   
sakana   pts/0        110.50.148.40    Sat Feb 24 11:18 - 11:33  (00:15)    
reboot   system boot  4.4.104-39-defau Sat Feb 24 08:48 - 12:23  (03:34)  

接下來試試看 ac 指令

# ac
total        0.47

這個時候出現 0.47 ( 單位是上面的 in hours, 也就是 0.47 小時 )

以每日為單位的方式來統計
# ac   -d
Today total        0.50

以人為單位來統計

# ac   -p
sakana                               0.54
ines                                 0.00
total        0.54

指定某個使用者來統計

# ac  -p   sakana
sakana                               0.56
total        0.56

接下來測試 sa 指令

網路上找的 man page

# sa  --help

               Usage: sa [ options ] [ file ]
               
               options: [-abcdfiljkmnprstuDKP] [-v <num>] [--version] [--help]
               [--other-acct-file <name>] [--other-usracct-file <name>]
               [--print-seconds] [--dont-read-summary-files] [--debug]
                [--separate-times] [--other-savacct-file <name>] [--percentages]
                [--print-ratio] [--print-users] [--merge] [--user-summary] [--group-summary]
               [--list-all-names] [--not-interactive] [--threshold <num>]
                [--sort-ksec] [--sort-tio] [--sort-sys-user-div-calls] [--sort-avio]
                [--sort-cpu-avmem] [--sort-num-calls] [--sort-real-time] [--ahz hz]
      [--show-paging] [--show-paging-avg]

The system's default process accounting files are:

 raw process accounting data: /var/log/account/pacct
     summary by command name: /var/log/account/savacct
         summary by username: /var/log/account/usracct

這個指令比較有感覺的是 -m 選項
  • -m, --user-summary
    • Print the number of processes and number of CPU minutes on

週三
2018年02月14日


face
Ansible azure module 測試小記 - azure_rm_virtualmachine

OS:  openSUSE Leap 42.3 in Azure

測試模組
  • azure_rm_publicipaddress
  • azure_rm_virtualmachine

上次的文章 http://sakananote2.blogspot.tw/2018/01/ansible-azure-module.html 進行 azure 工具的初始化, 今天要針對模組其他功能來進行測試


執行登入 ( 如果還沒有裝 az 指令就請參考文章安裝 )
# az   login
To sign in, use a web browser to open the page https://aka.ms/devicelogin and enter the code XXXXXXX  to authenticate.

測試一下指令

# az   vm  list  --output   table
Name          ResourceGroup    Location
------------  ---------------  ----------
test20180214  SAKANATEST       eastus

之前因為是測試, 所以建立完驗證之後, 我就會立馬刪除驗證, 接下來就動手再建立一個

還沒有建立驗證機制前, 先觀察一下
# az  ad  sp list --output table | grep azure-cli

建立驗證相關資料
# az  ad  sp  create-for-rbac --query  '{"client_id": appId, "secret": password, "tenant": tenant}'

{
 "client_id": "33a44043-xxxx-xxxx-xxxx-663eee4fd112",
 "secret": "27dd256a-xxxx-xxxx-xxxx-b28128f641f9",
 "tenant": "4cd326d7-xxxx-xxxx-xxxx-df56dc9dabd4"
}



建立完成之後觀察, 這個時候會有一筆 azure-cli-時間的授權

# az  ad  sp  list --output  table | grep azure-cli

33a44043-xxxx-xxxx-xxxx-663eee4fd112  azure-cli-2018-02-14-06-03-46             0c2d4a46-xxxx-xxxx-xxxx-8b71baf02fb7  ServicePrincipal


接下來還要有 subscription_id
使用 az account 指令取得

$ az  account  show  --query  "{ subscription_id: id }"
{
 "subscription_id": "6a2bdf3b-XXXX-XXXX-XXXX-3371d3401feb"
}


建立 存放認証的目錄( 如果沒有的話 )
# mkdir   ~/.azure

使用剛剛的資料建立認証的檔案
# vi   ~/.azure/credentials

[default]
subscription_id=6a2bdf3b-XXXX-XXXX-XXXX-3371d3401feb
client_id=d06f8905-XXXX-XXXX-XXXX-3e0bcf22a853
secret=b7f0df5b-XXXX-XXXX-XXXX-8aaca284f706
tenant=4cd326d7-XXXX-XXXX-XXXX-df56dc9dabd4


建立好了就可以開始測試了

==== 測試 Module name:  azure_rm_publicipaddress  ====

目標要從 sakanatest 這個資源群組, 建立一個 mypublic_ip 的固定 IP
先以單一指令的方式來實施吧
# ansible  localhost  -m  azure_rm_publicipaddress  -a  'resource_group=sakanatest name=mypublic_ip  allocation_method=Static'

這邊出現錯誤訊息在 openSUSE Leap in Azure

Using /etc/ansible/ansible.cfg as config file
[WARNING]: Could not match supplied host pattern, ignoring: all

[WARNING]: provided hosts list is empty, only localhost is available

localhost | FAILED! => {
   "changed": false,
   "failed": true,
   "msg": "Do you have msrestazure installed? Try `pip install msrestazure`- No module named msrest.serialization"
}


但是 Cloud-Shell 那邊沒有問題 …… Orz

==== 以下操作是在 cloud-shell 的終端機 ====

# ansible  localhost  -m  azure_rm_publicipaddress  -a  'resource_group=sakanatest name=mypublic_ip  allocation_method=Static'

[WARNING]: Unable to parse /etc/ansible/hosts as an inventory source

[WARNING]: No inventory was parsed, only implicit localhost is available

[WARNING]: Could not match supplied host pattern, ignoring: all

[WARNING]: provided hosts list is empty, only localhost is available

localhost | SUCCESS => {
   "changed": true,
   "state": {
       "dns_settings": {},
       "etag": "W/\"ff593fe3-XXXX-XXXX-XXXX-a3eb90006d47\"",
       "idle_timeout_in_minutes": 4,
       "ip_address": "213.192.72.82",
       "location": "eastus",
       "name": "mypublic_ip",
       "provisioning_state": "Succeeded",
       "public_ip_allocation_method": "Static",
       "tags": null,
       "type": "Microsoft.Network/publicIPAddresses"
   }
}

可以到 Azure Portal 上面確認 :)


接下來測試移除這個 IP

# ansible  localhost  -m  azure_rm_publicipaddress  -a  'resource_group=sakanatest name=mypublic_ip   state=absent'

[WARNING]: Unable to parse /etc/ansible/hosts as an inventory source

[WARNING]: No inventory was parsed, only implicit localhost is available

[WARNING]: Could not match supplied host pattern, ignoring: all

[WARNING]: provided hosts list is empty, only localhost is available

localhost | SUCCESS => {
   "changed": true,
   "state": {
       "status": "Deleted"
   }
}


接下來嘗試除了靜態 IP 之外還指定 FQDN

$ ansible  localhost  -m  azure_rm_publicipaddress  -a  'resource_group=sakanatest name=mypublic_ip   domain_name_label=sakana   allocation_method=Static'

[WARNING]: Unable to parse /etc/ansible/hosts as an inventory source

[WARNING]: No inventory was parsed, only implicit localhost is available

[WARNING]: Could not match supplied host pattern, ignoring: all

[WARNING]: provided hosts list is empty, only localhost is available

localhost | SUCCESS => {
   "changed": true,
   "state": {
       "dns_settings": {
           "domain_name_label": "sakana",
           "fqdn": "sakana.eastus.cloudapp.azure.com",
           "reverse_fqdn": null
       },
       "etag": "W/\"a0f0b9ec-XXXX-XXXX-XXXX-1a040d22b080\"",
       "idle_timeout_in_minutes": 4,
       "ip_address": "52.234.150.39",
       "location": "eastus",
       "name": "mypublic_ip",
       "provisioning_state": "Succeeded",
       "public_ip_allocation_method": "Static",
       "tags": null,
       "type": "Microsoft.Network/publicIPAddresses"
   }
}

這個部份也沒有問題

接下來實驗動態 IP, 這邊發現一個有趣的現象, 即使是動態 IP, 在 Azure 上面也可以設定 FQDN, 在該IP 沒有被使用的時候, 微軟的 DNS 會回應 255.255.255.255 :)

$ ansible localhost -m azure_rm_publicipaddress  -a  'resource_group=sakanatest name=mypublic_ip   domain_name_label=sakana   allocation_method=Dynamic'

[WARNING]: Unable to parse /etc/ansible/hosts as an inventory source

[WARNING]: No inventory was

週日
2018年02月11日


face
Nagios with openSUSE Leap 42.3

OS: openSUSE Leap 42.3 in Azure

Nagios: 3.5.1-4.2

想不到上次寫 Nagios with openSUSE Leap 42.2 是 2016年底 :)
  • Naigos 版本 3.5.1-2.3

今天來寫 Nagios with openSUSE Leap 42.3

檢查相關套件

# zypper   search  -s   nagios
Loading repository data...
Reading installed packages...

S | Name                      | Type    | Version    | Arch   | Repository            
--+---------------------------+---------+------------+--------+-----------------------
 | monitoring-plugins-nagios | package | 2.1.2-3.1  | x86_64 | openSUSE-Leap-42.3-Oss
 | nagios                    | package | 3.5.1-4.2  | x86_64 | openSUSE-Leap-42.3-Oss


安裝相關套件

# zypper  install   nagios  monitoring-plugins

設定 nagiosadmin 密碼

傳統的方式
# htpasswd2   -c   /etc/nagios/htpasswd.users   nagiosadmin
New password:
Re-type new password:
Adding password for user nagiosadmin

因為考慮之後自動化要結合 ansible 所以也嘗試了 -b 與 -i 選項, 這邊比較有趣的是 -b 或是 -i 都要相選項與 -c 放在一起, 也就是 -b -c 是不行的, 要 -bc 才行

-b  batch mode 密碼要放在使用者帳號後面
# htpasswd2  -bc   /etc/nagios/htpasswd.users    nagiosadmin    test
Adding password for user nagiosadmin

-i  read stdin, 透過 STDIN 來餵進去密碼
# echo  test  |  htpasswd2  -ic   /etc/nagios/htpasswd.users    nagiosadmin
Adding password for user nagiosadmin

確認 nagios 開機啟動

# systemctl   is-enabled   nagios
nagios.service is not a native service, redirecting to systemd-sysv-install
Executing /usr/lib/systemd/systemd-sysv-install is-enabled nagios
disabled

設定開機啟動 nagios
# systemctl   enable  nagios
nagios.service is not a native service, redirecting to systemd-sysv-install
Executing /usr/lib/systemd/systemd-sysv-install enable nagios


# systemctl   is-enabled   nagios
nagios.service is not a native service, redirecting to systemd-sysv-install
Executing /usr/lib/systemd/systemd-sysv-install is-enabled nagios
enabled

嘗試啟動 apache2, 這個時候會出現錯誤 ( 這個部份 Leap 42.2 開始就是這樣了  )
# systemctl  restart  apache2.service
Job for apache2.service failed because the control process exited with error code. See "systemctl status apache2.service" and "journalctl -xe" for details.


使用 status 觀察, 原因是 apache2.4 與 apache2.2 寫法不一樣
# systemctl  status  apache2.service
12月 31 11:11:50 template start_apache2[7143]: AH00526: Syntax error on line 15 of /etc/apache2/conf.d/nagios.conf:
12月 31 11:11:50 template start_apache2[7143]: Invalid command 'Order', perhaps misspelled or defined by a module not included in the server configuration
12月 31 11:11:51 template systemd[1]: apache2.service: Main process exited, code=exited, status=1/FAILURE

可以參考

解法啟用 access_compat 模組 ( openSUSE / SUSE 預設 authz_host 已經啟動 )
# a2enmod   mod_access_compat

列出已經啟用的 apache2 module
# apache2ctl   -M
  • 會將設定寫入 /etc/apache2/sysconfig.d/loadmodule.conf 檔案內 LoadModule access_compat_module /usr/lib64/apache2-prefork/mod_access_compat.so

重新啟動 apache2
# systemctl  restart  apache2.service

觀察資訊
# systemctl   status  apache2.service


啟動  nagios
# systemctl  start  nagios

觀察資訊
# systemctl  status nagios

開啟 http 服務防火牆設定 ( 這邊由於是使用 Azure 測試, 所以記得 NSG 的 port 80 輸入規則也要新增喔  )
#yast2   firewall

預設如果啟動 nagios, 他會去檢查本機 http 服務, 但是沒有預設網頁就會警告, 還有如果監控的項目比較多, total process 也會超標, 所以我調整了一下 /etc/nagios/objects/localhost.cfg  相關內容

#vi   /etc/nagios/objects/localhost.cfg
註解 HTTP, linux-servers 群組 以及調整 Total Process
# 2014/1/8 edit by sakana, temp disable HTTP monitor
#define service{
#        use         local-service         ; Name of service template to use
#        host_name                       localhost
#        service_description             HTTP
#       check_command                   check_http
#       notifications_enabled           0
#        }

# Define an optional hostgroup for Linux machines
#
#define hostgroup{
#        hostgroup_name  linux-servers ; The name of the hostgroup
#        alias           Linux Servers ; Long name of the group
#        members         localhost     ; Comma separated list of hosts that belong to this group
#        }


# 2014/1/8 edit by sakana change check_local_procs from 250 to 400, 400 to 800
define service{
       use                             local-service         ; Name of service template to use
       host_name                       localhost
       service_description             Total Processes
       check_command                   check_local_procs!400!800!RSZDT
       }

上面其實只是說明, 如果需求跟我一樣懶得動手改, 可以抓網路上我已經改好的
( 其實也是為了自己自動化 )

# wget  https://raw.githubusercontent.com/sakanamax/LearnAnsible/master/playbook/general/nagios/files/localhost.cfg

週四
2018年02月08日


face
NFS Server with openSUSE Leap 42.3

OS: openSUSE Leap 42.3

目的: 提供 NFS version 3 and NFS version 4 檔案分享

使用 zypper 安裝相關套件

# zypper   install   yast2-nfs-server
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 2 NEW packages are going to be installed:
 nfs-kernel-server yast2-nfs-server

The following recommended package was automatically selected:
 nfs-kernel-server

2 new packages to install.
Overall download size: 241.2 KiB. Already cached: 0 B. After the operation, additional 659.3 KiB will be used.
Continue? [y/n/...? shows all options] (y):

建立分享目錄

# mkdir   /dmshare

設定權限
# chmod  o+w   /dmshare/

還沒設定前, 先觀察相關資訊

# rpcinfo  -p  localhost
localhost: RPC: Port mapper failure - Unable to receive: errno 111 (Connection refused)

# cat   /etc/exports
# See the exports(5) manpage for a description of the syntax of this file.
# This file contains a list of all directories that are to be exported to
# other computers via NFS (Network File System).
# This file used by rpc.nfsd and rpc.mountd. See their manpages for details
# on how make changes in this file effective.

# systemctl  status   nfsserver.service
● nfsserver.service - Alias for NFS server
  Loaded: loaded (/usr/lib/systemd/system/nfsserver.service; disabled; vendor preset: disabled)
  Active: inactive (dead)

檢查 NFS4_SUPPORT 是否有啟用

# grep  NFS4   /etc/sysconfig/nfs
NFS4_SUPPORT="yes"
NFS4_SERVER_MINOR_VERSION="0"


使用 YaST 方式設定 NFS
啟動 yast2  nfs_server 模組

# yast2   nfs_server

點選  Start  -- > 點選 Next



設定要分享的目錄
點選 Add Directory


輸入或是選取要分享的目錄, 這邊以 /dmshare 為例
點選 OK


接下來針對分享目錄的設定
針對 主機或是選項進行調整, 請注意預設值選項有 ro ( read-only )
點選 OK



確認相關資訊 -- > 點選 Finish




觀察相關資訊,
這邊會看到 v3 的 port 111 with portmapper 以及 v4 port 2049

# rpcinfo  -p   localhost
  program vers proto   port  service
   100000    4   tcp    111  portmapper
   100000    3   tcp    111  portmapper
   100000    2   tcp    111  portmapper
   100000    4   udp    111  portmapper
   100000    3   udp    111  portmapper
   100000    2   udp    111  portmapper
   100024    1   udp  47009  status
   100024    1   tcp  40382  status
   100005    1   udp  20048  mountd
   100005    1   tcp  20048  mountd
   100005    2   udp  20048  mountd
   100005    2   tcp  20048  mountd
   100005    3   udp  20048  mountd
   100005    3   tcp  20048  mountd
   100003    3   tcp   2049  nfs
   100003    4   tcp   2049  nfs
   100227    3   tcp   2049  nfs_acl
   100003    3   udp   2049  nfs
   100003    4   udp   2049  nfs
   100227    3   udp   2049  nfs_acl
   100021    1   udp  58709  nlockmgr
   100021    3   udp  58709  nlockmgr
   100021    4   udp  58709  nlockmgr
   100021    1   tcp  44774  nlockmgr
   100021    3   tcp  44774  nlockmgr
   100021    4   tcp  44774  nlockmgr


觀察設定檔 /etc/exports, 這邊我有針對特定網段才能進行連線, 以及給 rw 設定
# cat   /etc/exports
/dmshare xxx.xxx.xxx.0/24(rw,root_squash,sync,no_subtree_check)

觀察服務狀態

# systemctl  status  nfsserver.service
● nfsserver.service - Alias for NFS server
  Loaded: loaded (/usr/lib/systemd/system/nfsserver.service; enabled; vendor preset: disabled)
  Active: active (exited) since Thu 2018-02-08 10:48:30 CST; 4min 26s ago
 Process: 9921 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 9921 (code=exited, status=0/SUCCESS)
   Tasks: 0 (limit: 512)
  CGroup: /system.slice/nfsserver.service

Feb 08 10:48:30 nfs systemd[1]: Starting Alias for NFS server...
Feb 08 10:48:30 nfs systemd[1]: Started Alias for NFS server.

因為是使用 YaST 設定的, 所以會把開機啟動也設定完成

# systemctl  is-enabled  nfsserver.service
enabled


接下來進行相關測試
於用戶端進行掛載測試

Client side:
觀察Server 分享目錄
# showmount  -e   對方IP

建立掛載目錄
# mkdir   /mnt/nfs

測試掛載
# mount   xxx.xxx.xxx.xxx:/dmshare   /mnt/nfs

觀察掛載狀況 , 這邊很有趣的是, 不需要特別指定 type 就會掛載 nfs v4

# mount | grep  dmshare
xxx.xxx.xxx.xxx:/dmshare

週二
2018年01月23日


face
NextCloud and openSUSE in RPi3 workshop 101


OS:  openSUSE Leap 42.3 with Raspberry Pi 3
OS:  openSUSE Leap 42.3 in Azure


講師是 Gray


投影片


連接到 Raspberry Pi 3
參考台灣樹莓派的作法 https://www.raspberrypi.com.tw/tag/usb-to-ttl/  我使用 USB to TTL 線連接 console




然後在 Mac 上面
#screen   /dev/cu.usbserial  115200


就可以連線進 Raspberry Pi 3
利用 #yast  lan 設定網路連接, 準備測試


OS:  openSUSE Leap  42.3  in Azure


開啟 openSUSE Leap 42.3 VM in Azure
  • 網路安全性群組開啟 SSH 與 HTTP




Nextcloud 12 基本需求
  • PHP
    • 7.0 or 7.1 ( 不支援 7.2 )
  • Database
    • MYSQL / MariaDB 5.5 or PostgresSQL 9
  • Web Server
    • Apache 2.4 + mod_php or Nginx + php-fpm


安裝相關套件
# zypper  install  apache2  apache2-mod_php7  mariadb  php7-gd  php7-json  php7-fpm php7-mysql  php7-curl  


#zypper  install php7-intl   php7-mcrypt  php7-zip  php7-mbstring  php7-zlib php7-openssl php7-fileinfo php7-posix

啟動 mysql 服務
# systemctl  start  mysql


設定開機啟動 mysql
# systemctl  enable  mysql
Created symlink from /etc/systemd/system/multi-user.target.wants/mysql.service to /usr/lib/systemd/system/mysql.service.


設定 mysql 管理者密碼
#mysqladmin  -u  root  password
New password:
Confirm new password:


登入 mysql 並建立 DB 與設定使用者帳密
# mysql  -u  root   -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 10.0.32-MariaDB SLE 12 SP1 package


Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


MariaDB [(none)]>


MariaDB [(none)]> CREATE DATABASE nextcloudb;
MariaDB [(none)]> GRANT ALL ON nextcloudb.* TO ncuser@localhost
IDENTIFIED BY 'dbpass';


MariaDB [(none)]> Bye


  • ncuser --   登入帳號
  • Dbpass --  登入密碼

==== 設定 PHP ( optional ) ====


這邊有些設定會牽動日後的檔案上傳, 所以視情況調整, 尤其是 post_max_size :)


#vim  /etc/php7/apache2/php.ini
post_max_size = 50G
upload_max_filesize = 25G
max_file_uploads = 20
max_input_time = 3600
max_execution_time = 3600
session.gc_maxlifetime = 3600
memory_limit = 128M


========================


啟用相關 apache module
# a2enmod  php7


# a2enmod  rewrite


# a2enmod  headers


確認掛載的 module
# apachectl  -M


啟動 apache 服務
# systemctl   start  apache2.service


# systemctl   enable   apache2.service
Created symlink from /etc/systemd/system/httpd.service to /usr/lib/systemd/system/apache2.service.
Created symlink from /etc/systemd/system/apache.service to /usr/lib/systemd/system/apache2.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/apache2.service to /usr/lib/systemd/system/apache2.service.

==== 建立資料區( optional ) ====
這邊則是如果有外接式硬碟或是儲存空間會進惜調整


假設外接硬碟掛載在 /mnt/
# mkdir   /mnt/nextcloud_data
# chmod  770  /mnt/nextcloud_data
# chown  wwwrun  /mnt/nextcloud_data


=========================


安裝 nextcloud
下載 NextCloud (https://nextcloud.com/install/ ) 這邊以 nextcloud 12.0.4 為例


解開 .zip 檔案
# unzip  nextcloud-*.zip

將解開的目錄複製到 apache2 根目錄
# cp  -r  nextcloud  /srv/www/htdocs/


修改擁有者為 wwwrun
# chown   -R   wwwrun  /srv/www/htdocs/nextcloud/


連接到 nextcloud
開啟 http://<server ip>/nextcloud


預設值是使用 SQLite, 所以要手動選擇




點選 儲存空間與資料庫
點選 MySQL/MariaDB
輸入 管理者帳號 / 密碼, MySQL 帳號 / 密碼, SQL db 名稱




點選完成設定


  • 預設的資料區路徑 /srv/www/htdocs/nextcloud/data


在 Client 的部份, 除了 PC 以外也可以使用 Android 與 iOS 程式連接




連結的位置可以點選左下角的設定
會出現 WebDAV 路徑, 用這個路徑來進行連線
基本上就是 https:// or http://<your_Server_IP>/nextcloud



資料區預設的路徑在 /srv/www/htdocs/nextcloud/data ,
存放的檔案會在/srv/www/htdocs/nextcloud/data/使用者帳號/files 目錄
所以如果使用者是 sakana, 就是 /srv/www/htdocs/nextcloud/data/sakana/files


狀況:
如果在系統內手動建立或複製檔案到 /srv/www/htdocs/nextcloud/data/sakana/files 不會出現在 nextcloud 內


# pwd
/srv/www/htdocs/nextcloud/data/sakana/files


# touch  test20180121.txt


# ls
Documents  Nextcloud Manual.pdf  Nextcloud.mp4  Photos  test20180121.txt

如果手動放檔案, 使用 occ 指令更新 nextcloud 內的檔案 list


# sudo  -u  wwwrun  php  /srv/www/htdocs/nextcloud/occ  files:scan  --all
The process control (PCNTL) extensions are required in case you want to interrupt long running commands - see http://php.net/manual/en/book.pcntl.php
Starting scan

週六
2018年01月20日


face
Kubernetes in Azure 建立小記

OS: openSUSE Leap 42.3

今天參加微軟的 Kubernetes in Azure workshop, 回來之後小記一下 kubernetes 建立
因為 workshop 環境是 Windows, 所以先在 openSUSE 內安裝 azure-cli


安裝 azure-cli 套件


匯入微軟的 key
# rpm  --import   https://packages.microsoft.com/keys/microsoft.asc


加入 azure-cli 的 repo ( 利用 echo 的方式建立檔案 )
# sh  -c  'echo -e  "[azure-cli]\nname=Azure CLI\nbaseurl=https://packages.microsoft.com/yumrepos/azure-cli\nenabled=1\ntype=rpm-md\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc"  > /etc/zypp/repos.d/azure-cli.repo'


觀察檔案內容其實就比較好理解
# cat   /etc/zypp/repos.d/azure-cli.repo
[azure-cli]
name=Azure CLI
baseurl=https://packages.microsoft.com/yumrepos/azure-cli
enabled=1
type=rpm-md
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc


使用 zypper 指令安裝 azure-cli


# zypper   refresh


# zypper  install  azure-cli


檢查 az 版本 ( 現在好像要用 2.0.25 才不會有狀況 )
# az  -v
azure-cli (2.0.25)


使用 互動的方式登入
$ az  login


To sign in, use a web browser to open the page https://aka.ms/devicelogin and enter the code GUXXXXV9 to authenticate.


在瀏覽器輸入 https://aka.ms/devicelogin
然後輸入他提供的機器碼以及驗證登入


建立資源群組
$ az   group  create  --name   sakanaResourceGroupACSK8S   --location  japanwest
{
 "id": "/subscriptions/6a2bdf3b-xxxx-xxxx-xxxx-3371d3401feb/resourceGroups/sakanaResourceGroupACSK8S",
 "location": "japanwest",
 "managedBy": null,
 "name": "sakanaResourceGroupACSK8S",
 "properties": {
   "provisioningState": "Succeeded"
 },
 "tags": null
}


使用 az 指令 建立 kubernetes 叢集, 大概需要 10 ~ 12 分鐘
# az  acs  create  --orchestrator-type  kubernetes  --resource-group  sakanaResourceGroupACSK8S  --name  sakanaK8SCluster  --generate-ssh-keys


SSH key files '/root/.ssh/id_rsa' and '/root/.ssh/id_rsa.pub' have been generated under ~/.ssh to allow SSH access to the VM. If using machines without permanent storage like Azure Cloud Shell without an attached file share, back up your keys to a safe location


{
 "id": "/subscriptions/6a2bdf3b-xxxx-xxxx-xxxx-3371d3401feb/resourceGroups/sakanaResourceGroupACSK8S/providers/Microsoft.Resources/deployments/azurecli1516283695.4135736",
 "name": "azurecli1516283695.4135736",
 "properties": {
   "additionalProperties": {
     "duration": "PT11M35.4092281S",
     "outputResources": [
       {
         "id": "/subscriptions/6a2bdf3b-xxxx-xxxx-xxxx-3371d3401feb/resourceGroups/sakanaResourceGroupACSK8S/providers/Microsoft.ContainerService/containerServices/sakanaK8SCluster",
         "resourceGroup": "sakanaResourceGroupACSK8S"
       }
     ],
     "templateHash": "9902003256629544111"
   },
   "correlationId": "b49a4c9e-xxxx-xxxx-xxxx-629207669fbf",
   "debugSetting": null,
   "dependencies": [],
   "mode": "Incremental",
   "outputs": {
     "masterFQDN": {
       "type": "String",
       "value": "sakanak8sc-sakanaresourcegr-xxxxxxxxxx.japanwest.cloudapp.azure.com"
     },
     "sshMaster0": {
       "type": "String",
       "value": "ssh azureuser@sakanak8sc-sakanaresourcegr-xxxxxxxxxx.japanwest.cloudapp.azure.com -A -p 22"
     }
   },
   "parameters": {
     "clientSecret": {
       "type": "SecureString"
     }
   },
   "parametersLink": null,
   "providers": [
     {
       "id": null,
       "namespace": "Microsoft.ContainerService",
       "registrationState": null,
       "resourceTypes": [
         {
           "aliases": null,
           "apiVersions": null,
           "locations": [
             "japanwest"
           ],
           "properties": null,
           "resourceType": "containerServices"
         }
       ]
     }
   ],
   "provisioningState": "Succeeded",
   "template": null,
   "templateLink": null,
   "timestamp": "2018-01-18T14:03:52.171257+00:00"
 },
 "resourceGroup": "sakanaResourceGroupACSK8S"
}


  • 可以使用 --agent-count  1 來指定 agent 的數量
  • 上面輸出有提到可以使用 SSH 連線
    • ssh azureuser@sakanak8sc-sakanaresourcegr-xxxxxxxxxx.japanwest.cloudapp.azure.com -A -p 22


上面那個指令會在家目錄下的 .ssh 目錄建立 RSA 公鑰以及私鑰
# ls  ~/.ssh
id_rsa  id_rsa.pub  known_hosts


另外會建立 4 台虛擬機器, 可以在 Azure portal 內觀察



嘗試在本機 建立 kubectl 指令, 但是有錯誤, 查了一下, 應該是 proxy 的 bug
# az  acs  kubernetes  install-cli
Downloading client to /root/.kube/config from https://storage.googleapis.com/kubernetes-release/release/v1.9.1/bin/linux/amd64/kubectl
Connection error while attempting to download client ([Errno 2] No such file or directory: '/root/.kube/config')

所以接下來使用 Azure Cloud-shell 的方式來執行指令


==== 以下是在 Azure Cloud-shell ====


想要使用 az 指令連接 kubernetes 但是失敗
$ az  acs  kubernetes  get-credentials  --resource-group  sakanaResourceGroupACSK8S  --name  sakanaK8SCluster
Private key file /home/chunhung/.ssh/id_rsa does not exist


剛剛建立的時候 SSH 金鑰是放在本機的 ~/.ssh 內


觀察 cloud-shell 的內容, cloud-shel 會連接 clouddrive 空間


$ df
Filesystem                                                                                 1K-blocks     Used Available Use% Mounted on
overlay                                                                                     50758760 19691704  31050672  39% /
tmpfs                                                                                         981948        0    981948   0% /dev
tmpfs                                                                                         981948        0    981948   0% /sys/fs/cgroup
/dev/sda1                                                                                   50758760 19691704  31050672  39% /etc/hosts
shm                                                                                            65536        0     65536   0% /dev/shm
//csg6a2bdfx3bec25x48cdxaf4.file.core.windows.net/cs-sakana-hotmail-com-1003bffd8d03ba28

週六
2018年01月13日


face
Ansible azure module 測試小記

OS: openSUSE Leap 42.3 in Azure



參考

微軟的文件上面是列出 SLES 12, 然後安裝比較多的套件, 但是他列出的套件本來就有相依性, 例如 python-pip 與 python-setuptools , 所以我就先按照 Ansible 官方的 方式, 我先安裝 pip 來處理

安裝 pip ( 先使用 sudo su - 切換成管理者 root )
# zypper  install  python-pip

預設的 pip 是 7.1.2 所以如果沒有升級, 後續安裝會失敗, 先來升級 pip
# pip  install  --upgrade   pip

觀察 pip 版本
# pip  --version
pip 9.0.1 from /usr/lib/python2.7/site-packages (python 2.7)

安裝相關套件
# pip  install   ansible[azure]

確認相關資訊
# ansible   --version
ansible 2.4.2.0
 config file = None
 configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
 ansible python module location = /usr/lib/python2.7/site-packages/ansible
 executable location = /usr/bin/ansible
 python version = 2.7.13 (default, Jan 03 2017, 17:41:54) [GCC]

# pip   list   --format=columns   azure  |  grep  azure
azure-cli-core              2.0.24   
azure-cli-nspkg             3.0.1    
azure-common                1.1.8    
azure-mgmt-batch            4.1.0    
azure-mgmt-compute          2.1.0    
azure-mgmt-containerservice 1.0.0    
azure-mgmt-dns              1.2.0    
azure-mgmt-keyvault         0.40.0   
azure-mgmt-network          1.7.1    
azure-mgmt-nspkg            2.0.0    
azure-mgmt-resource         1.2.2    
azure-mgmt-sql              0.7.1    
azure-mgmt-storage          1.5.0    
azure-mgmt-web              0.32.0   
azure-nspkg                 2.0.0    
azure-storage               0.35.1   
msrestazure                 0.4.20   

接下來要來處理 Azure 驗證的問題

Ansible 官方的方式我覺得步驟太多, 所以先採用 Azure-Cli 方式
Azure-Cli 可以使用兩種方式

目前先以 Cloud-shell 方式來進行
於 Azure portal 上面點選 >_ 按鈕
就會被提示安裝 Cloud-shell , 我是選 bash 方式


他會需要一個儲存體來使用, 選取訂用帳戶之後就會建立 Cloud-shell



測試一下 az 指令來列出目前的 VM ( 覺得加上--output  table 這個方式很方便 )

==== 以下操作是在 cloud-shell 的終端機 ====

$ az  vm  list  --output  table
Name                       ResourceGroup    Location
-------------------------  ---------------  ----------
kong-0-11-1-test-20171118  SAKANATEST       eastus
test20180113               SAKANATEST       eastus

接下來回到微軟官方說的

az ad sp create-for-rbac --query [client_id: appId, secret: password, tenant: tenant]
  • az  -  Azure 工具指令
  • ad : Synchronize on-premises directories and manage Azure Active Directory resources
  • sp : Manage Azure Active Directory service principals for automation authentication
  • create-for-rbac  : Create a service principal and configure its access to Azure resources.

如果直接在 cloud-shell 執行會出現錯誤

$ az ad sp create-for-rbac --query [client_id: appId, secret: password, tenant: tenant]
az ad sp create-for-rbac: error: argument --query: invalid query value: '[client_id:'


嘗試方式 1:
這樣的方式可行
$ az  ad  sp   create-for-rbac  --query   '[appId, password, tenant]'
Retrying role assignment creation: 1/36
Retrying role assignment creation: 2/36
[
 "d69d8f91-XXXX-XXXX-XXXX-b90b15d8107d",
 "65f16417-XXXX-XXXX-XXXX-296e19bebf4c",
 "4cd326d7-XXXX-XXXX-XXXX-df56dc9dabd4"
]

所以用這樣的想法來推論, 應該是微軟官方文件上面的格式錯誤

上 Azure Taiwan Users Group 上面詢問, 與保哥討論後的方式
$ az  ad  sp  create-for-rbac --query  '{"client_id": appId, "secret": password, "tenant": tenant}'
Retrying role assignment creation: 1/36
{
 "client_id": "d06f8905-XXXX-XXXX-XXXX-3e0bcf22a853",
 "secret": "b7f0df5b-XXXX-XXXX-XXXX-8aaca284f706",
 "tenant": "4cd326d7-XXXX-XXXX-XXXX-df56dc9dabd4"
}

  • 果然兇手是符號  應該配合大括號, 以及單引號與雙引號

如何知道有建立完成呢?
可以使用 az  ad  sp  list 指令檢查, 會有 azure-cli-日期方式的 AppId

$ az  ad  sp  list  --output  table
AppId                                 DisplayName                               ObjectId                              ObjectType
------------------------------------  ----------------------------------------  ------------------------------------  ----------------
7b427a33-XXX-XXXX-XXXX-XXXXa7d8a60c  azure-cli-2018-01-13-04-22-35             f29caeda-XXXX-XXXX-XXXX-97dc15849728  ServicePrincipal


如果要刪除也是使用 az ad sp 指令來處理, 例如
$ az  ad  sp  delete --id   80027916-XXXX-XXXX-XXXX-778cddb9e155

建立的時候, password 的值請好好保存 ( 不然就刪除掉再建立一個 :p  )
因為以 az  ad  sp  show 方式是查不到 password 的喔
$ az  ad  sp  show --id   647f8726-XXXX-XXXX-XXXX-5f2e03e8f2c8


接下來還要有 subscription_id
使用 az account 指令取得

$ az  account  show  --query  "{ subscription_id: id }"
{
 "subscription_id": "6a2bdf3b-XXXX-XXXX-XXXX-3371d3401feb"
}

  • 這邊微軟官方文件上面的符號就是正確的 QQ


==== 以上操作是在 cloud-shell 的終端機, 操作結束 ====

接下來會到 openSUSE Leap 42.3 in Azure 這邊

建立 存放認証的目錄
# mkdir   ~/.azure

使用剛剛的資料建立認証的檔案
# vi   ~/.azure/credentials

[default]
subscription_id=6a2bdf3b-XXXX-XXXX-XXXX-3371d3401feb
client_id=d06f8905-XXXX-XXXX-XXXX-3e0bcf22a853
secret=b7f0df5b-XXXX-XXXX-XXXX-8aaca284f706
tenant=4cd326d7-XXXX-XXXX-XXXX-df56dc9dabd4


建立好了就可以開始測試了
首先就從最簡單的管理 IP 開始吧 :)

Module name:  azure_rm_publicipaddress

目標要從 sakanatest 這個資源群組, 建立一個 mypublic_ip 的固定 IP
先以單一指令的方式來實施吧
# ansible  localhost  -m  azure_rm_publicipaddress  -a  'resource_group=sakanatest name=mypublic_ip  allocation_method=Static'

[WARNING]: Unable

週三
2018年01月10日


face
iperf with VMware vSphere 6.5 測試小記


Host: VMware vSphere 6.5
Hardware:  Dell R730


測試環境


VMware  Host --  >   10G Switch  -- >  VMware Host  


沒有開 Jumbo Frames, 所以 MTU 是 1500 ( 因為 10G Switch 不在我的控制範圍內 )

最近因為工作的關係, 所以要來測試網路的連線速度以及效能


一開始在 VMware 的 Guest OS ( openSUSE Leap 42.3 ) 測試 iperf 的時候, 覺得頻寬沒有達到預期.


所以就決定先測試 VMware Host 彼此對連的速度


搜尋一下 google, 找到相關文章[1] , 之前找到的文章, iperf 位置是在別的地方, 所以找不到相關指令.

Server side:


確認 VMKernel 的 vSwitch 只連接上 10G 網卡


首先是關掉 VMware vSphere 的 firewall
  • 這個部份因為是測試環境才這樣做, 不然的話開啟 iperf 預設的 TCP port 5001 也可以


連線到 VMware vSphere 主機 SSH ( 開啟 SSH 服務 )


透過 esxcli 指令觀察 firewall 狀況( 參考文章[2] ).


[root@localhost:~] esxcli  network   firewall   get
  Default Action: DROP
  Enabled: true
  Loaded: true


停用 firewall
[root@localhost:~] esxcli  network  firewall  set  --enabled   false

觀察 firewall
[root@localhost:~] esxcli  network   firewall   get
  Default Action: DROP
  Enabled: false
  Loaded: true


複製 iperf 指令
為何要複製 iperf 指令呢?


因為如果用原來的 iperf 指令, 會出現 Operation not permitted, 連線會被拒絕


[root@localhost:~] /usr/lib/vmware/vsan/bin/iperf   -s
bind failed: Operation not permitted
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 64.0 KByte (default)
------------------------------------------------------------


所以乖乖的複製吧 :)
[root@localhost:~] cp   /usr/lib/vmware/vsan/bin/iperf    /usr/lib/vmware/vsan/bin/i
perf.copy


以複製出來的指令執行 iperf   server  mode


[root@localhost:~] /usr/lib/vmware/vsan/bin/iperf.copy    -s
---------------------------------------