歡迎光臨 Planet openSUSE

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

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


週三
2019年01月23日


face
Cron job in container 小記

OS: openSUSE Leap 15
Container image:  opensuse/leap:15

昨天在 Cloud Native meet up 遇到 Haway, 被問一個問題, 如何在 container 內執行 cron task

之前沒有這樣嘗試過, 今天就來嘗試一下

想法:
  • 測試使用 cron job 每分鐘寫入訊息到檔案

下載 openSUSE Leap 15 container image

# docker  pull  opensuse/leap:15

執行 container
# docker  run  --rm  -it  opensuse/leap:15  /bin/bash

以下在 container 內操作

安裝 vim 與  cron
15a63ae236e1:/ # zypper  -n  install  vim  cron

撰寫 crontab 檔案

15a63ae236e1:/ #  vi  crontab
內容如下
* * * * * /testcron.sh

作法上就是每分鐘去執行 /testcron.sh
  • 如果是 Dockfile 內的寫法, 覺得可以用 ADD 從本機加進去已經寫好的檔案, 或是使用 RUN 搭配 wget 從網路上抓下來, 這樣不用互動來建立檔案.
  • 預設進入點會在 / 目錄下, 所以檔案的完整路徑就會是  /crontab

給予適當權限
15a63ae236e1:/ #  chmod 644 crontab

接下來編輯要去定時執行的程式
15a63ae236e1:/ #  vi   /testcron.sh
內容如下
echo “Hello, Cron”  >> /tmp/testcron.txt
Date                        >> /tmp/testcron.txt

  • 如果是 Dockfile 內的寫法, 覺得可以用 ADD 從本機加進去已經寫好的檔案, 或是使用 RUN 搭配 wget 從網路上抓下來, 這樣不用互動來建立檔案.

給予適當權限
15a63ae236e1:/ #  chmod a+x  /testcron.sh

觀察相關資訊
15a63ae236e1:/ #  ls  /var/spool/cron/tabs/

使用 crontab 指令匯入剛剛的工作
15a63ae236e1:/ #  crontab  /crontable

觀察相關資訊
15a63ae236e1:/ #  ls  /var/spool/cron/tabs/
root

觀察相關資訊
15a63ae236e1:/ #  ps aux | grep cron

執行 cron 指令
15a63ae236e1:/ #  cron

  • 在 Dockfile 寫法上,  想法上就是放在 CMD 或是 ENTRYPOINT 執行, 啟動 container  就執行

觀察相關資訊
15a63ae236e1:/ #  ps aux | grep cron

等待幾分鐘

觀察相關資訊
15a63ae236e1:/ #  cat   /tmp/testcron.txt
Hello, Cron
Wed Jan 23 08:14:01 UTC 2019
Hello, Cron
Wed Jan 23 08:15:02 UTC 2019
Hello, Cron
Wed Jan 23 08:16:01 UTC 2019


也算是多實驗一個方式
~ enjoy it

Reference:


週二
2019年01月22日


face
Nextcloud with openSUSE Leap 15 同步設置小記


OS: openSUSE Leap 15


這篇是回憶文, 因為相關機制已經運作一段時間, 目前也日趨穩定
所以就寫這篇來紀錄一下


左邊是我的 Desktop, 中間是 Raspberry Pi 3 + HD




Raspberry Pi 端:


目前使用 Raspberry Pi 3 加上 container 來運作 nextcloud 日後取代 Dropbox


使用 Docker 運作 nextcloud / owncloud


使用雙層硬碟座來連接硬碟
  • 使用 2 顆 2TB 硬碟來存放資料
    • /mnt/usb
      • 主要存放資料的地方
        • nextcloud 如上述放在指定的目錄然後讓 docker run -v 掛載目錄
        • 其他的資料透過 ssh, 讓 Client 使用 filezilla 來存取
    • /mnt/backup
      • 備份資料使用, 使用 crontab 來處理, 如果主要硬碟死掉, 還有一份
        • # crontab -l
        • 0 4 * * * rsync -a --delete /mnt/usb/* /mnt/backup/

PC 端:


安裝 nextcloud client 程式來進行同步 PC端到 Raspberry Pi 上的資料夾
  • 有建立一個 Dropbox 目錄在 Nextcloud 目錄內
  • 透過 rsync 將 Dropbox 目錄同步到 nextcloud 上面的 Dropbox 資料夾
    • > crontab -l
    • 0 22 * * * rsync -a --delete /Dropbox/sakana/Dropbox/*  /home/sakana/Nextcloud/Dropbox/


其他資料透過 filezilla 來存取


簡單來說就是
  • Dropbox 資料夾有異動, 每天晚上10點會同步到 Nextcloud 目錄下的 Dropbox 資料夾
  • PC 端的 NextCloud 下的資料夾有異動就會同步到 Raspberry Pi 上面的目錄, 然後 Raspberry Pi 上面每天早上 4點會抄寫到另外一顆硬碟


找個時間來想想 Google Drive 的同步吧


~ enjoy it


Reference:


週三
2019年01月09日


face
openSUSE Leap 15 正式版 安裝小記2

這次也是使用 USB 來進行安裝,  家中的 Leap 15 已經安裝半年
所以今天來裝公司的  Desktop


== 安裝過程小記==

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

安裝的內容, 我這次是全新安裝, 所以沒有匯入 SSH主機金鑰和組態


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

Notes
  • Ifconfig 預設沒有安裝, 要使用 ip  address show

關閉GNOME裡面的搜尋功能(點選右上角的設定按鈕), 因為我覺得用不到


中文輸入法問題:

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


取消 USB 為安裝來源
# yast2  repositories


Google Chrome:

還是會有驗證性問題, 但是功能沒有差異
為了進行google 登入,先使用 Google 驗證App,  後面來處理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 vlc-codecs
因為 mplayber 與 smplayer 不知道為何播放 .mp4 有點問題, 但是使用 VLC 就沒有問題
所以我就安裝 VLC Media player
  • Mp4 codec 應該是要安裝 vlc-codecs,  需要 Packman 套件庫

並將 .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 中文預設沒問題, 但是也是順手裝起來
  • 下載軟體的 .tar.gz 然後以  root 安裝

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


下載 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 15:

安裝 kernel-default-devel  
# zypper   install   kernel-default-devel kernel-source
# ./VMware-Workstation-Full-15.0.2-10952284.x86_64.bundle

如果啟動的時候出現找不到 Kernel Header
# yast2  sw_single
點選 kernel-default-devel 套件, 點選 Versions 分頁, 勾選適當的 kernel 版本


取消 “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_2_3.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



按照上面的參考設定

# zypper  install alacarte
設定 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 安裝:

目前版本 18.06.1-ce
#zypper  install docker

將使用者 sakana  加入 docker 群組

#systemctl  start docker
#systemctl  enable docker


GNOME Extension:

參考調校小記

> gnome-tweak-tool
裝了
  • TopIcons
  • NetSpeed


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

使用 forticlientsslvpn_linux_4

週五
2019年01月04日


face
Visual Studio Code with openSUSE Leap 15 小記

OS: openSUSE Leap 15.0
Visual Studio Code:  1.30.1

2019 年計畫的一部分就是要增強自己程式能力的部份, 農曆年後應該會再多一個 python 的讀書會
所以為了這個目的, 開始進行環境的準備.

開發環境的部份選擇 Visual Studio Code

參考 openSUSE wiki 上面的作法

新增 Microsoft 的 Key
# rpm  --import   https://packages.microsoft.com/keys/microsoft.asc

將 vscode repo 資訊加入到 /etc/zypp/repos.d 目錄
# sh  -c  ' echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ntype=rpm-md\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc"  > /etc/zypp/repos.d/vscode.repo '

觀察檔案資訊

# cat   /etc/zypp/repos.d/vscode.repo
[code]
name=Visual Studio Code
baseurl=https://packages.microsoft.com/yumrepos/vscode
enabled=1
type=rpm-md
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc

執行 zypper  refresh
# zypper  refresh

安裝 vscode
# zypper  install  code

Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following NEW package is going to be installed:
 code

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

安裝好之後就會在應用程式內看到


啟動程式後的界面



然後會自動帶起 vscode 介紹網頁

首先第一件事就是安裝 python 的 Extension
點選歡迎畫面的 Tools and languages
左邊會看到比較受歡迎的 Extension, 最上面就有 Python, 點選 Install 的按鈕

然後我也順便安裝了 Docker Extension

可以點選 左方的 Extension 按鈕進行確認


顏色的部份我是選擇 light theme 感覺比較清爽



接下來就準備多練習程式了 :)

~ enjoy it

Reference:



週六
2018年12月22日


face
方便的 my.vmware.com 下載工具 - vmw-cli 測試小記

OS: openSUSE Leap 15 in Azure

之前看到一個工具 vmw-cli 可以用 command line 方式下載 VMware 產品 ISO
  • vmw-cli is a CLI client used to login and interact with my.vmware.com. It provides an interface for programmatic query and download of VMware product binaries.

今天有點時間, 來嘗試一下

# zypper  install  npm8
Building repository 'openSUSE-Leap-15.0-Non-Oss' cache ...................[done]
Building repository 'openSUSE-Leap-15.0-Oss' cache .......................[done]
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 4 NEW packages are going to be installed:
 nodejs-common nodejs8 nodejs8-devel npm8

The following recommended package was automatically selected:
 npm8

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


使用 npm 安裝 vmw-cli

# npm  install  vmw-cli  --global

/usr/local/bin/vmw-cli -> /usr/local/lib/node_modules/vmw-cli/lib/vmw-cli.js
+ vmw-cli@1.1.13
added 82 packages in 8.946s

還沒有定義帳號密碼前先觀察資訊, 使用 vmw-cli  list 可以列出產品

# vmw-cli  list
vmware-workstation-pro
vmware-workstation-player
vmware-workspace
vmware-workspace-one
vmware-vsphere
vmware-vsphere-with-operations-management
vmware-vsphere-storage-appliance
vmware-vsphere-integrated-containers
vmware-vsphere-hypervisor-esxi
vmware-vsphere-data-protection-advanced
vmware-vsan
...


但是要進行其他相關指令會被提示要有帳號以及密碼

# vmw-cli   index vmware-vsphere

Updating [fileIndex.json] for all permitted downloads in [vmware-vsphere] ...
[ERROR]: environment variables $VMWUSER and $VMWPASS not set! Please configure

接下來嘗試 export 帳密
#export  VMWUSER='<userid>'
#export  VMWPASS='<password>'

嘗試 inex 但是這個過程會很久, 然後會產生 fileIndex.json
# vmw-cli  index vmware-vsphere

觀察相關資訊

# ls  /usr/local/lib/node_modules/vmw-cli/lib
cookies.json  extract-files.js  get-file.js get-product.js   group.vmware-vsphere.json index.json.session  utils.js vmw-cli.js xtable.js
examples      fileIndex.json    get-index.js  get-solution.js  index.json          mainIndex.json vmw-api.js  xcell.js

接下來嘗試 vmw-cli  find 指令
這邊是找出檔案名稱內有 vcsa 字元的

# vmw-cli   find  fileName:vcsa

Loading available solutions in [fileIndex.json] ...

solution                                   productGroup productType version fileName                                                      fileDate fileSize fileType download  
-----------------------------------------  ------------ ---------------- --------- ------------------------------------------------------------  ---------- -------- -------- --------
vmware-workspace-one                       VC67U1 Product Binaries  6.7.0U1 VMware-VCSA-all-6.7.0-10244745.iso                            2018-10-16 3.95 GB iso yes
vmware-workspace-one                       VC60U2M Product Binaries  6.0U2M VMware-VCSA-all-6.0.0-4191361.iso                             2016-09-15 2.605 GB iso yes
vmware-vsphere                             VC67U1 Product Binaries 6.7.0U1 VMware-VCSA-all-6.7.0-10244745.iso                            2018-10-16 3.95 GB iso yes
vmware-vsphere                             VC65U2C Product Binaries 6.5.0 U2c VMware-VCSA-all-6.5.0-9451637.iso                             2018-08-14 3.27 GB iso yes
vmware-vsphere                             VC65U1G_OSS Open Source 6.5.0U1g open-source-license-VMware-vCenter-Server-VCSA-65U1-g-GA.txt  2018-03-20 4.59 MB txt yes
vmware-vsphere                             VC60U3H Product Binaries 6.0 U3h VMware-VCSA-all-6.0.0-9451619.iso                             2018-08-14 3.09 GB iso yes
vmware-vsphere                             VC60U2M Product Binaries 6.0U2M VMware-VCSA-all-6.0.0-4191361.iso                             2016-09-15 2.605 GB iso yes
vmware-vsphere-with-operations-management  VC67U1        Product Binaries  6.7.0U1 VMware-VCSA-all-6.7.0-10244745.iso                            2018-10-16 3.95 GB iso yes
vmware-vsphere-with-operations-management  VC60U3H       Product Binaries  6.0 U3h VMware-VCSA-all-6.0.0-9451619.iso                             2018-08-14 3.09 GB iso yes
vmware-vsphere-with-operations-management  VC60U2M       Product Binaries  6.0U2M VMware-VCSA-all-6.0.0-4191361.iso                             2016-09-15 2.605 GB iso yes
vmware-vsphere-with-operations-management  VC65U2C       Product Binaries  6.5.0 U2c VMware-VCSA-all-6.5.0-9451637.iso                             2018-08-14 3.27 GB iso yes
vmware-vsphere-with-operations-management  VC65U1G_OSS   Open Source    6.5.0U1g open-source-license-VMware-vCenter-Server-VCSA-65U1-g-GA.txt  2018-03-20 4.59 MB txt yes
vmware-vsan                                VC67U1 Product Binaries 6.7.0U1 VMware-VCSA-all-6.7.0-10244745.iso                            2018-10-16 3.95 GB iso yes
vmware-vsan                                VC65U2C Product Binaries 6.5.0 U2c VMware-VCSA-all-6.5.0-9451637.iso                             2018-08-14 3.27

face
CrazyDiskInfo with openSUSE Leap 15


OS: openSUSE Leap 15 in Azure


昨天在橋本修太的 Twitter 看到 Haruka 一篇文章 【小ネタ】openSUSEで CrazyDiskInfo をインストールしてディスクの健康状態を監視  , 所以就順手做了起來

套件名稱 CrazyDiskInfo


查了 software.opensuse.org/search


我使用的方式是 One click install 方式來安裝


安裝 OneClickInstallCLI 套件 yast2-metapackage-handler


# zypper  install   yast2-metapackage-handler


Loading repository data...
Reading installed packages...
Resolving package dependencies...


The following 12 NEW packages are going to be installed:
 expat perl-CPAN-Changes perl-Devel-Symdump perl-Net-DBus perl-Pod-Coverage perl-Test-Pod perl-Test-Pod-Coverage
 perl-X11-Protocol perl-XML-Twig perl-XML-XPath xdg-utils yast2-metapackage-handler


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


使用 OneClickInstallCLI 指令來安裝




If you continue, the following repositories will be subscribed:
* http://download.opensuse.org/repositories/home:/tsuroot/openSUSE_Leap_15.0/
If you continue, the following software packages will be installed:
* crazydiskinfo
Continue? y/N
Y (這邊輸入Y 繼續)
Adding Repositories...


這樣就完成安裝了


# crazy
No S.M.A.R.T readable devices.
If you are non-root user, please use sudo or become root.


傻眼..... Azure 上面的磁碟沒有 SMART readable device Orz….
真是 make me crazy XD


好吧, 只有拿自己的桌機繼續實驗了


OS:  openSUSE Leap 15


安裝相關套件


If you continue, the following repositories will be subscribed:
* http://download.opensuse.org/repositories/home:/tsuroot/openSUSE_Leap_15.0/
If you continue, the following software packages will be installed:
* crazydiskinfo
Continue? y/N
Y (這邊輸入Y 繼續)
Adding Repositories...


執行 crazy 指令, 輸出結果如下圖


# crazy




Reference:

~ enjoy it

週四
2018年11月29日


Ray Chen: elementary os 5.0 Juno

01:28 UTCmember

face


1. ASUS X553M:

https://wiki.archlinux.org/index.php/ASUS_X553MA

By adding the kernel parameter modprobe.blacklist=dw_dmac,dw_dmac_core

2. 基本安裝:

https://ithelp.ithome.com.tw/users/20107229/ironman/1409 

3. 基本安裝2:

https://www.ubuntupit.com/best-things-to-do-after-installing-elementary-os/

4. 應用程式圖示無法正確顯示:

修改 /usr/share/applications/ 下的 *.desktop 刪除 Icon[zh_TW]=...

5. 安裝 wingpanel-indicator-ayatana

https://elementaryos.stackexchange.com/questions/16502/missing-icons-in-the-wingpanel

6. 修改 fcitx 系統匣圖示:







/usr/share/icons/HighContrast/scalable/devices/input-keyboard.svg

7. 安裝 desktop folder:

https://www.omgubuntu.co.uk/2018/01/elementary-desktop-icons-files-app

8. 設定 plank 或安裝 ubuntu 版本(支援 zoom 功能):

https://elementaryos.stackexchange.com/questions/2680/how-can-i-customise-plank

https://elementaryos.stackexchange.com/questions/1933/plank-magnifying-effect

9. X553M ramdom freeze:

http://forums.debian.net/viewtopic.php?f=10&t=130571

You might try adding intel_idle.max_cstate=1 to the GRUB line that boots your system



週六
2018年10月20日


face
SCSI scan tool in VMware 小記

OS: openSUSE Leap 42.3 in VMware
VMware: vSphere ESXi 6.5

這兩天因為一個專案要調整 VM 磁碟空間, 所以有注意到 在 VMware 內新增磁碟會遇到的狀況, 寫這篇小記紀錄一下

首先描述一下情境
當我們在 VMware 的 VM 裡面新增硬碟的時候, 如果用主觀意識來想, 會覺得應該 OS 會馬上抓到硬碟.

所以想法上 當使用 fdisk -l 的時候應該要看得到新的硬碟

但是如果在 VMware 內( 也許實體也是 ), 事實上不是這樣的, 還要經過 rescan SCSI 裝置, 才能讓 VM 知道他有新的裝置可以使用.

在 openSUSE Leap 的環境內, 已經有內建的指令可以作這件事.
使用 rescan-scsi-bus.sh

檔案位置在 /usr/bin 下
# which  rescan-scsi-bus.sh
/usr/bin/rescan-scsi-bus.sh

提供的套件為 sg3_utils
# rpm  -qf  /usr/bin/rescan-scsi-bus.sh
sg3_utils-1.43-12.1.x86_64


當在 VMware 內新增硬碟的時候 rescan-scsi-bus.sh 是必須加上 -a 參數才有效的( 實際測試也是這樣 )

所以作法就是
#rescan-scsi-bus.sh  -a

接下來使用  fdisk -l 就可以看的到了
:)

==== 同場加映 gparted ====

在 openSUSE and SUSE 的環境, 磁碟的編輯都是透過 yast2  disk 來進行, 但是如果在 ubuntu 或是其他的系統, 要建立分割區的話, 另外一種簡單的方式就是使用 gparted

openSUSE 這邊只要使用
# zypper  install gparted
就可以進行安裝
在圖形界面下就可以看到 GParted 程式



==== 同場加映 scsi rescan in Ubuntu 16.04 ====

那上述的情況如果在 Ubuntu 16.04 又該如何呢?

OS: Ubuntu 16.04 in VMware

作法就是安裝 scsitools 套件

#sudo  apt-get  install  scsitools

接下來就可以使用  rescan-scsi-bus 指令啦
#sudo  rescan-scsi-bus

這邊也感謝  Daniel Lin 提供給我資訊還有方向 :)

~ enjoy it

Reference:






週二
2018年08月28日


face
Raspberry Pi 3 with openSUSE Leap 15 小記

Hardware: Raspberry Pi 3
OS: openSUSE Leap 15


距離上次安裝 Raspberry Pi 已經 8 個月了 :)
參考:

我還是使用 X11 的桌面環境


將 SD Card 插入 linux 內, 這邊以  /dev/sdf 為例

使用下列指令建立 openSUSE Leap 15 with RaspberryPi
  • 下面的 /dev/sdf 是你的 SD Card 千萬不要殺錯人


# xzcat  openSUSE-Leap15.0-ARM-X11-raspberrypi3.aarch64-2018.07.02-Buildlp150.1.1.raw.xz |  dd  bs=4M of=/dev/sdf   iflag=fullblock  oflag=direct ; sync

好了之後將 SD Card 放入 Raspberry Pi 開機就可以
  • 第一次因為要安裝, 所以會比較久, 去喝個咖啡動一動吧
  • 預設帳號是 root  密碼是 linux


這個版本就沒有無線網路的 bug, 所以使用 #yast2  lan 設定好無線之後就直接使用


~ enjoy it

Reference:


週六
2018年08月25日


face
netbox with docker in azure

看到 digital ocean 出了一個專案 netbox 就想說來試試看

上面看到有人有做 docker 的版本

OS:  openSUSE Leap 42.3  in Azure

首先登入 Azure 的 openSUSE Leap 42.3

切換成 root
> sudo   su -

啟動 docker 服務
# systemctl  start  docker

安裝 docker-compose 指令
# zypper  install  docker-compose

Clone 專案
# git  clone  -b   master  https://github.com/ninech/netbox-docker.git

Cloning into 'netbox-docker'...
remote: Counting objects: 652, done.
remote: Compressing objects: 100% (47/47), done.
remote: Total 652 (delta 44), reused 72 (delta 38), pack-reused 563
Receiving objects: 100% (652/652), 214.17 KiB | 5.22 MiB/s, done.
Resolving deltas: 100% (355/355), done.

觀察資訊
# ls
.bash_history  .gnupg bin netbox-docker

進到專案目錄
# cd   netbox-docker/

openSUSE Leap 42.3 預設用的 docker-compose 版本比較舊 ( 1.8.1 )
  • openSUSE Leap 15 版本就夠新了1.17


先移除舊版的 docker-compose 1.8.1
# zypper  remove  docker-compose

Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following package is going to be REMOVED:
 docker-compose

1 package to remove.
After the operation, 512.8 KiB will be freed.
Continue? [y/n/...? shows all options] (y): y
(1/1) Removing docker-compose-1.8.1-13.1.noarch ..................................................................................[done]

下載最新版的 docker-compose

# sudo curl  -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)  -o   /usr/local/bin/docker-compose

 % Total    % Received % Xferd  Average Speed Time    Time Time Current
                                Dload Upload Total Spent Left  Speed
100   617 0   617 0  0 5300 0 --:--:-- --:--:-- --:--:--  5318
100 11.2M  100 11.2M  0 0 18.1M      0 --:--:-- --:--:-- --:--:-- 42.1M


加上執行權限
# chmod  +x   /usr/local/bin/docker-compose

確認 docker-compose 版本
# /usr/local/bin/docker-compose  --version
docker-compose version 1.22.0, build f46880fe

如果不想輸入絕對路徑可以登出再登入

執行 docker-compose  pull
# /usr/local/bin/docker-compose  pull

Pulling postgres      ... done
Pulling redis         ... done
Pulling netbox-worker ... done
Pulling netbox        ... done
Pulling nginx         ... done

觀察相關資訊
# docker   images

REPOSITORY          TAG IMAGE ID            CREATED SIZE
ninech/netbox       latest 4a7492cae085        3 days ago 480MB
redis               4-alpine 08bef618c30a        3 weeks ago 28.7MB
postgres            10.4-alpine 962ed899c609        4 weeks ago 72.9MB
nginx               1.15-alpine 36f3464a2197        4 weeks ago 18.6MB


使用 docker-compose 來佈署
# /usr/local/bin/docker-compose   up    -d

Creating network "netbox-docker_default" with the default driver
Creating volume "netbox-docker_netbox-static-files" with local driver
Creating volume "netbox-docker_netbox-nginx-config" with local driver
Creating volume "netbox-docker_netbox-media-files" with local driver
Creating volume "netbox-docker_netbox-report-files" with local driver
Creating volume "netbox-docker_netbox-postgres-data" with local driver
Creating volume "netbox-docker_netbox-redis-data" with local driver
Creating netbox-docker_postgres_1      ... done
Creating netbox-docker_redis_1    ... done
Creating netbox-docker_netbox-worker_1 ... done
Creating netbox-docker_netbox_1        ... done
Creating netbox-docker_nginx_1         ... done

觀察相關資訊
# docker  ps
CONTAINER ID        IMAGE   COMMAND  CREATED STATUS              PORTS NAMES
62ef5260ecc1        nginx:1.15-alpine   "nginx -c /etc/net..."  About a minute ago Up 56 seconds       80/tcp, 0.0.0.0:32768->8080/tcp   netbox-docker_nginx_1
f2d531e60cde        ninech/netbox:latest   "/opt/netbox/docke..."  About a minute ago Up About a minute                                     netbox-docker_netbox_1
1011ab8e3225        ninech/netbox:latest   "python3 /opt/netb..."  About a minute ago Up About a minute                                     netbox-docker_netbox-worker_1
cd6f25108265        redis:4-alpine   "docker-entrypoint..."  About a minute ago Up About a minute   6379/tcp netbox-docker_redis_1
af54cd3234aa        postgres:10.4-alpine   "docker-entrypoint..."  About a minute ago Up About a minute   5432/tcp netbox-docker_postgres_1

可以觀察 docker-compose.yml 或是 docker ps 知道, 目前走 port 32768   

也可以使用 指令查詢
# /usr/local/bin/docker-compose  port   nginx

週五
2018年08月24日


face
Nextcloud with docker 測試小記

Server:
OS: openSUSE Leap 42.3 in Azure

Client:
OS: openSUSE Leap 42.3


因為 dropbox linux client 未來有可能不支援 非加密 EXT4 以外的檔案系統, 所以就來想替代方案, 目前鎖定 nextcloud, 而且他也有 docker 的版本



連線到 openSUSE Leap 42.3 in Azure


切換為 root


>sudo  su  -


啟動 docker 服務
# systemctl   start  docker


一開始先來測試 單一容器 + HTTP 存取


Lab1: 單一容器 + HTTP存取


Server 端:


執行 nextcloud 容器
# docker  run  -d  -p  80:80  nextcloud


# docker   ps
CONTAINER ID        IMAGE COMMAND                  CREATED STATUS PORTS                NAMES
60e3b19053a3        nextcloud "/entrypoint.sh ap..."   7 seconds ago Up 5 seconds 0.0.0.0:80->80/tcp   friendly_easley


在 Azure 設定 security group 允許 port 80 通過


連線 nextcloud (預設使用 SQL-Lite)


一開始會建立管理者帳號
輸入 使用者名稱 / 密碼 -- > 點選 完成設定


就會順利完成設定, 無痛完成




Client 端:


OS:  openSUSE Leap 42.3


接下來就是安裝 Client 的應用程式


使用 zypper 安裝
# zypper  install  nautilus-extension-nextcloud  nextcloud-client
Loading repository data...
Reading installed packages...
Resolving package dependencies...


The following 17 NEW packages are going to be installed:
 libQt5Positioning5 libQt5Sensors5 libQt5Sensors5-imports libQt5WebChannel5
 libQt5WebChannel5-imports libQt5WebKit5 libQt5WebKit5-imports
 libQt5WebKitWidgets5 libgypsy0 libnextcloudsync0 libqt5keychain1
 libqt5keychain1-lang nautilus-extension-nextcloud nextcloud-client
 nextcloud-client-lang python-nautilus typelib-1_0-Nautilus-3_0


The following 2 recommended packages were automatically selected:
 libqt5keychain1-lang nextcloud-client-lang


The following package is suggested, but will not be installed:
 nextcloud-client-doc


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

安裝完成之後, 就可以執行 Nextcloud desktop 程式




一開始會出現Nextcloud精靈 ( 翻譯沒有很準確 )
輸入 伺服器位置 -- > 下一個



輸入使用者名稱與密碼 -- >  下一個




設定要同步的選項 -- > 點選 連線中



因為有跟檔案總管整合, 所以可以使用瀏覽器的方式或是資料夾的方式 -- > 點選 完成




預設會在 $HOME/nextcloud , 可以觀察同步狀況



Lab2: 2個容器(  nextcloud & MariaDB ) + HTTP存取


Nextcloud 預設使用 SQLite, 但是他有建議, 如果是用桌面版程式同步, 就不建議用 SQLite
要使用 MySQL / MariaDB 或是其他的資料庫


接下來就來實作 使用 2個容器 nextcloud 與 mariadb 來提供服務


Server 端:


接下來嘗試使用 MySQL / MariaDB 方式
將剛剛的 container 刪除 ( 使用 docker stop / docker rm )


使用 docker-compose 方式來建立


首先要先安裝 docker-compose 指令
使用 zypper 安裝


# zypper   install   docker-compose


Loading repository data...
Reading installed packages...
Resolving package dependencies...


The following 32 NEW packages are going to be installed:
 docker-compose python-PySocks python-PyYAML python-appdirs python-backports python-backports.ssl_match_hostname
 python-cached-property python-certifi python-cffi python-chardet python-cryptography python-docker-py python-docker-pycreds
 python-dockerpty python-docopt python-enum34 python-functools32 python-idna python-ipaddress python-jsonschema python-ndg-httpsclient
 python-packaging python-py python-pyOpenSSL python-pycparser python-pyparsing python-requests python-setuptools python-six
 python-texttable python-urllib3 python-websocket-client


The following 5 recommended packages were automatically selected:
 python-PySocks python-cryptography python-idna python-ndg-httpsclient python-pyOpenSSL


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


參考官方的設定建立 docker-compose.yml 檔案
  • 檔案內紅色字體內, 請自行設定 MySQL 的密碼
  • 我把官方的 port 8080 改為 port 80


# vi   docker-compose.yml


version: '2'


volumes:
 nextcloud:
 db:


services:
 db:
   image: mariadb
   restart: always
   volumes:
     - db:/var/lib/mysql
   environment:
     - MYSQL_ROOT_PASSWORD=nextcloud
     - MYSQL_PASSWORD=nextcloud
     - MYSQL_DATABASE=nextcloud
     - MYSQL_USER=nextcloud


 app:
   image: nextcloud
   ports:
     - 80:80
   links:
     - db
   volumes:
     - nextcloud:/var/www/html
   restart: always


使用 docker-compose 指令建立
# docker-compose   up   -d


接下來連線到 nextcloud


要注意的是
  • 資料庫要選 MySQL / MariaDB
  • 資料庫帳號密碼 要使用 docker-compose.yml 內的設定
  • 主機的部份因為是使用 docker, 然後是分開的 container, 這邊就用 db:3306






觀察相關資訊


# docker   ps
CONTAINER ID        IMAGE COMMAND                  CREATED STATUS PORTS                NAMES
de1741e2abae        nextcloud "/entrypoint.sh ap..."   27 seconds ago Up 24 seconds 0.0.0.0:80->80/tcp   root_app_1
296498164d13        mariadb "docker-entrypoint..."   29 seconds ago Up 26 seconds 3306/tcp             root_db_1

Client 的連線方式一樣, 就不重複了


接下來文章再來挑戰, HTTPS 方式


也算往 nextcloud 邁進一步


~ enjoy it

Reference:






週日
2018年07月29日


face
使用 ansible 安裝 azure-cli 套件 with openSUSE Leap

OS: openSUSE Leap 42.3  in Azure

動機:
  • 使用 Azure 上面的 VM 進行一些實驗
  • 有些環境光使用 Cloud-Shell 也無法滿足, 要配合 az 指令
    • 不想動到實體機器, 使用 Azure 上面的 openSUSE 安裝 azure-cli來進行實驗
    • 實體機器沒有裝 azure-cli 套件, 使用 ansible 來安裝


寫了一個 ansible 的 playbook 來安裝  azure-cli 套件

相關的檔案已經放到 Github 上面, 歡迎使用


hosts 檔案內容如下, 沒有特別的地方, 只有建立一個 AzureCliHost 群組來等等套用安裝

# syntax: servername  options
# ansible_host -- Remote Host IP
# ansible_user -- Remote SSH User Name
# ansible_ssh_private_key_file -- SSH Key
# ansible_ssh_pass -- SSH Password for remote host
# ansible_port -- Remote SSH port
# testserver   ansible_host=xxx.xxx.xxx.xxx   ansible_user=root ansible_ssh_private_key_file=
# test01 ansible_host=


#### Group List ###########################

# 安裝 azure-cli 套件
[AzureCliHost]
#test01

主要的 playbook 檔案上場 azure-cli_install.yml , 使用 zypper / rpm_key / zypper_repository 這 3 個 module
檔案內容如下

---
#########################################################  
#
- 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 azure-cli package
# 使用群組方式安裝 use group, 請配合 hosts 內的 [AzureCliHost]
 hosts: AzureCliHost
 become: True
#
 tasks:
   - name: Install curl
# 這邊使用 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:
       - curl
     when: ansible_distribution == "openSUSE Leap"

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

# 匯入 rpm key
   - name: Import RPM key
     rpm_key:
       state: present
       key: https://packages.microsoft.com/keys/microsoft.asc

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

# 新增Azure Cli repo
   - name: Add Azure-Cli repo
     zypper_repository:
       name: "azure-cli"
       repo: 'https://packages.microsoft.com/yumrepos/azure-cli'


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

# 安裝 azure-cli
   - name: Install azure-cli

# 這邊使用 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:
       - azure-cli
     when: ansible_distribution == "openSUSE Leap"

使用方式

將主機的 IP 以及名稱 寫入 hosts 檔案, 將主機加入 AzureCliHost 群組

如果是使用 azure 環境就參考下列的指令 來完成
# ansible-playbook --ask-pass --ask-sudo-pass  -u  your_user_name  azure-cli_install.yml

這樣以後做實驗或是空機裝 azure-cli 應該就方便多了
之後有空再來加 Ubuntu 或是其他 OS 的部份

~ enjoy it

Reference:





週六
2018年07月21日


face
Kubernetes in Azure with openSUSE Leap 15 建立小記

OS:  openSUSE Leap 15
Azure-cli:  2.0.42

最近要準備新的讀書會 kubernetes up and running
所以要來準備實做環境, 目前選定 Azure 的 AKS 服務

作法有兩種

Cloud Shell 方式應該是最方便的
但是 azure cli 應該也要會使用

安裝 azure-cli

安裝 curl
# zypper  install  -y  curl

匯入 rpm key

新增 Azure CLI 的 repo
# zypper  addrepo --name 'Azure CLI' --check https://packages.microsoft.com/yumrepos/azure-cli azure-cli  

Adding repository 'Azure CLI' ....................................................................................................[done]
Repository 'Azure CLI' successfully added

URI         : https://packages.microsoft.com/yumrepos/azure-cli
Enabled     : Yes                                       
GPG Check   : Yes                                       
Autorefresh : No                                               
Priority    : 99 (default priority)                            

Repository priorities are without effect. All enabled repositories share the same priority.

安裝 azure-cli 套件
# zypper  install --from azure-cli  -y  azure-cli

Building repository 'Azure CLI' cache ............................................................................................[done]
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following NEW package is going to be installed:
 azure-cli

1 new package to install.
Overall download size: 20.7 MiB. Already cached: 0 B. After the operation, additional 135.5 MiB will be used.
Continue? [y/n/...? shows all options] (y): y
Retrieving package azure-cli-2.0.42-1.el7.x86_64                                                   (1/1), 20.7 MiB (135.5 MiB unpacked)
Retrieving: azure-cli-2.0.42-1.el7.x86_64.rpm ........................................................................[done (1.2 MiB/s)]
Checking for file conflicts: .....................................................................................................[done]
(1/1) Installing: azure-cli-2.0.42-1.el7.x86_64 ..................................................................................[done]

檢查 az 版本
# az   -v
azure-cli (2.0.42)

使用互動的方式登入 azure ( 現在已經不需要輸入機器碼, 直接驗證帳號就可以  )
> az  login

Note, we have launched a browser for you to login. For old experience with device code, use "az login --use-device-code"
已在目前的瀏覽器工作階段開啟新視窗。
You have logged in. Now let us find all subscriptions you have access to...

接下來參考 AKS 的快速入門來建立 Kubernets


建立資源群組, 這邊使用日東, 因為一開始用 美東, 不知道為何都失敗...
> az  group  create  --name  sakanaK8s  --location  japaneast

建立 AKS 叢集
> az aks create --resource-group sakanaK8s --name myAKScluster --node-count 1 --generate-ssh-keys

安裝 kubectl
> az  aks  install-cli
Downloading client to /usr/local/bin/kubectl from https://storage.googleapis.com/kubernetes-release/release/v1.11.1/bin/linux/amd64/kubectl
Connection error while attempting to download client ([Errno 13] Permission denied: '/usr/local/bin/kubectl')
  • 這邊失敗是因為我使用一般使用者, 對 /usr/local/bin 目錄沒有寫入權限

暫時性解法, 開啟 other 寫入權限, 然後等等再改回來
# chmod  o+w   /usr/local/bin/

> az  aks  install-cli
Downloading client to /usr/local/bin/kubectl from https://storage.googleapis.com/kubernetes-release/release/v1.11.1/bin/linux/amd64/kubectl
Please ensure that /usr/local/bin is in your search PATH, so the `kubectl` command can be found.

取得驗證資料
> az  aks  get-credentials  --resource-group  sakanaK8s --name   myAKScluster
Merged "myAKScluster" as current context in /home/sakana/.kube/config
觀察一下 config
> cat   ~/.kube/config

暫時性解法, 改回來/usr/local/bin 權限
# chmod  o-w   /usr/local/bin/

使用 kubectl 指令測試

> kubectl  get  nodes

NAME                       STATUS ROLES AGE   VERSION
aks-nodepool1-26466856-0   Ready agent 19m   v1.9.9

進行應用程式測試
建立 azure-vote.yaml


使用 kubectl apply 命令來執行應用程式

> kubectl  apply  -f  azure-vote.yaml

deployment.apps/azure-vote-back created
service/azure-vote-back created
deployment.apps/azure-vote-front created
service/azure-vote-front created

可以使用 kubectl  get service 來觀察相關資訊
> kubectl  get  service

可以觀察 azure-vote-front 的外部IP 來連線看應用程式測試的結果


刪除剛剛的應用程式

> kubectl  delete  -f  azure-vote.yaml

deployment.apps "azure-vote-back" deleted
service "azure-vote-back" deleted
deployment.apps "azure-vote-front" deleted
service "azure-vote-front" deleted


刪除剛剛建立的叢集

> az  aks  delete  --resource-group  sakanaK8s

週二
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 這個軟體