歡迎光臨 Planet openSUSE

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

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


週六
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年09月13日


face
NextCloud and openSUSE in RPi3 workshop 101


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


講師是 Gary Lin


投影片


連接到 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

週二
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 這個軟體
  • 官方網站 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