歡迎光臨 Planet openSUSE

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

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


週六
2019年11月23日


face
將GCP Stackdriver Alert 傳送到 telegram 小記

OS: container with openSUSE Leap 15.1

上次寫的是 “使用 Stackdriver 監控 GCE CPU 使用率, 超出監控值主動發出通知”, 通知的方式是 E-mail

那如果要更即時的方式呢?
所以接下來就來實驗透過 Telegram 來接受訊息 :)

首先要來建立 telegram bot

可以點選 以下網址 開啟 telegram 

或是在 telegram 程式中 

搜尋 @botfather


點選 START


接下來就會進入對話
也可以看到剛剛點選的 /start


輸入 /newbot 建立 bot

接下來會被要求輸入 bot 名稱, 這邊我以 sakana-gcp 為例子
輸入 sakana-gcp


然後是建立 bot 的使用者, 必須以 bot 結尾

我這邊以 sakana_gcp_bot 為例
輸入 sakana_gcp_bot
  • 這邊的命名規則不給輸入 - , 所以我用底線



建立完成會給 bot 的 HTTP API TOKEN


整理一下
  • Bot 名稱( 顯示名稱 ): sakana-gcp
  • Bot 使用者名稱(帳號): sakana_gcp_bot


接下來觀察 bot 是否可以加入群組

輸入 /setjoingroups
  • 預設是 Enable, 就是 bot 可以被加入群組
  • 如果被要求輸入 bot , 要輸入的是 bot 使用者名稱, @sakana_gcp_bot 


建立 Group



搜尋剛剛建立的 bot
點選 sakana-gcp , 點選其他要加入的人, 例如自己
點選 NEXT


輸入群組名稱
點選 CREATE GROUP 建立群組


接下來檢查是否可以查到已經加入群組的資訊, 以及 Group ID

使用 curl 指令 針對 bot 查詢資訊
> curl  https://api.telegram.org/botYOUR_TOKEN/getUpdates

{"ok":true,"result":[]}

  • 這邊的 YOUR_TOKEN 就是剛剛 @botfather 給的 TOKEN

  • 如果result 是空的, 就把 bot 從群組踢出去再加入一次, 再試試看

從資料中取得 Group Chat ID


使用 curl 確認是否可以用這個 Group Chat ID 發送訊息

>curl  -X  POST  "https://api.telegram.org/botYOUR_TOKEN/sendMessage"   -d "chat_id=YOUR_CHAT_ID&text=my sample text"

  • -X 是 request , -d 是 data
    • 注意雙引號各把 host 以及 data 內容標示住

成功的話應該會看到訊息



Cloudfunction 部分

使用 container 方式來建立相關程式
  • 要有 npm 套件, 等等在 container 內建立, 不影響自己環境

> docker  run  -v  ~/.aws:/root/.aws  -v  ~/.azure:/root/.azure  -v ~/.config/gcloud:/root/.config/gcloud  -it  sakana/ansible_opensuse151  /bin/bash



==== 在 contaienr 內 ( openSUSE Leap 15.1 with ansible and cloud tools ) ====

安裝 npm
# zypper  install  npm

Loading repository data...
Reading installed packages...
'npm' not found in package names. Trying capabilities.
Resolving package dependencies...

The following 8 NEW packages are going to be installed:
  libicu60_2 libicu60_2-ledata nodejs-common nodejs10 nodejs10-devel npm10 system-user-nobody timezone

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


建立 telegram 目錄
# mkdir  telegram

進入 telegram 目錄
# cd  telegram

建立 index.js

# vi   index.js

const axios = require('axios');
// replace the value below with the Telegram token you receive from @BotFather
const token = '[YOUR_TOKEN]';
const chatId ='[YOUR_CHAT_ID]';
const url = `https://api.telegram.org/bot${token}/sendMessage`;
function sendMessage(msg) {
  return axios.post(url, {
   chat_id: chatId,
   text: msg,
});
}
exports.trigger = (req, res) => {
 const incident = req.body.incident;
 const policy = incident.policy_name;
 const cond = incident.condition_name;
 const state = incident.state;
 const url = incident.url;
 const msg = `${policy} ${cond} is ${state}, please check ${url}`
 console.log(msg);
 sendMessage(msg)
 .then(function (response) {
   console.error('invoke telegram');
   res.send({ status: 'OK'});
 })
.catch(function (error) {
  console.error(error);
  res.sendStatus(500);
 });
};

執行 npm init , 全都按照預設值

# npm  init

This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (telegram) 
version: (1.0.0) 
description: 
entry point: (index.js) 
test command: 
git repository: 
keywords: 
author: 
license: (ISC) 
About to write to /telegram/package.json:

{
  "name": "telegram",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this OK? (yes)  Y


安裝 axios 

# npm install axios

npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN telegram@1.0.0 No description
npm WARN telegram@1.0.0 No repository field.

+ axios@0.19.0
added 5 packages

週五
2019年11月15日


face
三大雲平台工具容器升級小記 with openSUSE Leap 15.1 container

OS: container with openSUSE Leap 15.1

上次升級是 2019/8/3 , 這次會來升級的原因是 Google SDK 已經到了 271.0.0, 然後最近要作一個 Lab 需要 gcloud compute resource-policies 相關指令,  但是 Google SDK 245.0.0 沒有....
[ 謎之音: 需求是前進的鞭子 ~  ]

先整理結果

升級前
OS: openSUSE Leap 15
awscli:  aws-cli/1.16.210 Python/2.7.14
gcloud: Google Cloud SDK 245.0.0
azure-cli: 2.0.70

升級後
OS: openSUSE Leap 15.1
awscli:  aws-cli/1.16.282 Python/2.7.14
gcloud: Google Cloud SDK 271.0.0
azure-cli: 2.0.76

Todo
  • 12 月的時候將 awscli 用 python3 安裝
    • 原因是 Google SDK 目前還是 Python2, 所以想要一起升級 :p

這次的做法會透過 docker build 指令來進行
  • 我有比較過 docker build 以及使用現有的 docker image 修改後再使用 docker commit 建立的 image 大小還是很有差異的

Dockerfile 的部分我是拿之前 openSUSE Leap 15 來修改

實際上只有修改
  • openSUSE Leap 版本
  • Update time
  • Google SDK 版本還有下載的檔案路徑以及檔案名稱


列出 diff 的結果給大家參考

> diff  opensuseLeap151_ansible_Dockerfile  opensuseLeap15_ansible_Dockerfile 

1,2c1,2
< # openSUSE Leap 15.1 with ansible, azure-cli
< FROM opensuse/leap:15.1
---
> # openSUSE Leap 15 with ansible, azure-cli
> FROM opensuse/leap:15
6c6
< # update: 20191116
---
> # update: 20190727
49c49
< # Install google cloud SDK 271
---
> # Install google cloud SDK 240
51,52c51,52
< RUN wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-271.0.0-linux-x86_64.tar.gz && \
<   tar zxvf google-cloud-sdk-271.0.0-linux-x86_64.tar.gz && \
---
> RUN wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-245.0.0-linux-x86_64.tar.gz && \
>   tar zxvf google-cloud-sdk-245.0.0-linux-x86_64.tar.gz && \


Dockerfile 內容如下

# openSUSE Leap 15.1 with ansible, azure-cli
FROM opensuse/leap:15.1

# Author
# MAINTAINER 已經棄用, 之後要使用 LABEL 方式
# update: 20191116
LABEL maintainer="sakana@cycu.org.tw"

# Install python2-pip, upgrade pip, ansible[azure]
RUN zypper install -y python2-pip && \
  pip2 install --upgrade pip && \
  pip2 install ansible[azure]

# Install openssh, set ls alias
RUN zypper install -y openssh
RUN echo "alias ls='ls --color=tty'" >> /root/.bashrc

# Install wget, download azure_rm.py, set permission
RUN zypper install -y wget && \
  wget  https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/azure_rm.py && \
  chmod a+x azure_rm.py && \
  mv azure_rm.py /root

# Create working directory in /root
RUN mkdir /root/.azure && \
  mkdir /root/.aws && \
  mkdir /root/playbook && \
  mkdir -p /root/.config/gcloud && \
  wget https://raw.githubusercontent.com/sakanamax/LearnAnsible/master/template/ansible.cfg && \
  mv /ansible.cfg /root && \
  wget https://raw.githubusercontent.com/sakanamax/LearnAnsible/master/template/hosts && \
  mv /hosts /root

# Install azure-cli
RUN zypper install -y curl && \
  rpm --import https://packages.microsoft.com/keys/microsoft.asc && \
  zypper addrepo --name 'Azure CLI' --check https://packages.microsoft.com/yumrepos/azure-cli azure-cli && \
  zypper install --from azure-cli -y azure-cli

#install vim tar gzip
RUN zypper install -y vim tar gzip
RUN echo "set encoding=utf8" > /root/.vimrc

# Install awscli
RUN pip install awscli
RUN echo "source /usr/bin/aws_bash_completer" >> /root/.bashrc


# Install google cloud SDK 271
ENV CLOUDSDK_CORE_DISABLE_PROMPTS 1
RUN wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-271.0.0-linux-x86_64.tar.gz && \
  tar zxvf google-cloud-sdk-271.0.0-linux-x86_64.tar.gz && \
  /google-cloud-sdk/install.sh && \
  echo "if [ -f '/google-cloud-sdk/path.bash.inc' ]; then . '/google-cloud-sdk/path.bash.inc'; fi" >> /root/.bashrc && \
  echo "if [ -f '/google-cloud-sdk/completion.bash.inc' ]; then . '/google-cloud-sdk/completion

週六
2019年11月02日


face
使用 Stackdriver 監控 GCE CPU 使用率, 超出監控值主動發出通知小記


OS: Container with openSUSE Leap 15


以前管地端機器的時候, 因為大部分的專案跟自己有關係, 可以藉由 nagios 或其他方式進行監控.  現在業務上以雲端的資源為主, 所以就要多利用雲端原生的方式來進行監控.


需求: GCE CPU 超過一定使用量, 通知使用者


做法: 使用 Stackdriver Monitoring Alert 來達成


登入 GCP Console


點選 STACKDRIVER 的 Monitoring




這個時候會被導向到另外一個頁面 https://app.google.stackdriver.com/
如果之前專案沒有建立過 Starkdriver 的工作區, 那就按照引導建立工作區並將 GCP 上面的專案加入到工作區
  • Stackdriver 費用又是另外一個故事, 改天再來說


點選 Alerting -- > Create a Policy




點選 Add Condition 



Metrics 的部分我使用
compute.googleapis.com/instance/cpu/utilization
  • 另外有看到 agent.googleapis.com/cpu/utilization, 猜測是要安裝 agent, 然後由agent 傳回值 




Filter 的部分
剛開始是使用 instance_id 方式, 但是要一台一台指定, 轉向使用 name (VM 名稱)的方式來進行.
之後的目標是使用標籤的方式來 filter.




更新使用標籤的部分

  • 之前沒有看到標籤是因為時間差, 我一建立完 GCE, 然後套用 env: prod 的標籤就去設定 Stackdriver monitoring policy, 標籤的資料還沒同步過去, 當套用標籤後過一些時間, 再重新建立 filter 就會看到 env 可以選, 然後點選 prod 就可以了
  • 感謝 GCPUG.TW 的朋友幫忙

Configuration 部分設定 1分鐘超過 50 % 就警告




可以在右方觀察到基準線
也可以看到套用的 GCE VM

點選 SAVE 完成 Condition 設定


接下來設定通知方式
點選下拉式選單來選取, 這邊我是只能選 Email
  • 希望未來使用 Telegram 通知 :)



輸入要通知的 E-mail address -- > Add Notification Channel
輸入 Policy 名稱 -- > Save
完成設定



接下來進行驗證
我在GCP 上面建立兩台 openSUSE Leap 15, 並安裝 stress-ng 來進行壓測
  • 可以參考之前的文章 [1] 


使用 stress-ng 壓測
在 GCE VM 上面
# stress-ng  -c  4  --cpu-method all


可以從剛剛設定的 Policy 觀察到 CPU 超過監控值




達到門檻值, 也看到產生 Incident 與通知使用者






完成相關設定以及驗證


做完 Console 的方式, 接下來當然會想去評估 API 方式, 參考官方文件


看起來的邏輯是要
  • 建立通知管道 Notification
  • 然後才能建立 Policy


因為還要針對 YAML 或是 JSON 內容進行編輯, 不能直接使用 get 或是 describe 方式取得之後來套用, 所以這個部分就先跳過


先記下來


~ enjoy it


Reference:
  1. 宏庭科技 Joy 幫忙, 給我基本相關做法





週六
2019年10月26日


face
使用 ab ( Apache HTTP server benchmarking tool ) with openSUSE Leap 15.1 測試小記

OS: openSUSE Leap 15.1
ApachBench: 2.3

最近因為工作上的需要, 有使用了一下 ab 指令進行 http 相關測試.
因為 ab 指令是內建在 Mac OS 內, 所以回家後就想要在 openSUSE Leap 15.1 上面進行測試
但是 ab 指令沒有預設安裝, 所以就要手動安裝

指令是 ab, 雖然知道是 Apache Benchmark 工具, 下意識就會想要使用
# zypper  search ab 來進行尋找 :p

但是其實 ab 指令是內建在 apache2-utils 套件內

所以使用 zypper 指令配合對的套件名稱進行安裝

# zypper  install  apache2-utils

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

The following NEW package is going to be installed:
  apache2-utils

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

套件大小很迷你 :)

檢查版本資訊

> ab  -V

This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

我用的是 2.3 的版本

進行簡單的連線測試

> ab  -c 10  -n 100  -s 10  http://www.gnome.org/

This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.gnome.org (be patient).....done


Server Software:        
Server Hostname:        www.gnome.org
Server Port:            80

Document Path:          /
Document Length:        0 bytes

Concurrency Level:      10
Time taken for tests:   8.019 seconds
Complete requests:      100
Failed requests:        0
Non-2xx responses:      100
Total transferred:      11900 bytes
HTML transferred:       0 bytes
Requests per second:    12.47 [#/sec] (mean)
Time per request:       801.921 [ms] (mean)
Time per request:       80.192 [ms] (mean, across all concurrent requests)
Transfer rate:          1.45 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      234 346 347.0    289 3313
Processing:   238 304 52.5    287 612
Waiting:      238 304 52.5    287 611
Total:        487 650 350.6    585 3583

Percentage of the requests served within a certain time (ms)
  50%    585
  66%    616
  75%    629
  80%    641
  90%    686
  95%   1261
  98%   1621
  99%   3583
 100%   3583 (longest request)

  • -c 是同時連線數量 Concurrency
  • -n 是 request 數量
  • -s 是 timeout
  • 以上是對 GNOME 網站每次以 10 個連線, 進行 100 requests

參考網路上找到的文章[2]  , 嘗試使用 -g 選項

> ab -c 10 -n 100 -g out.data http://www.gnome.org/
  • -g 產生 gnuplot 檔案

在該目錄下面會產生 out.data 檔案

因為沒有安裝 gnuplot, 所以使用 zypper 安裝

# zypper install gnuplot

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

The following 2 NEW packages are going to be installed:
  gnuplot libcerf1

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


使用非互動方式畫出圖形

> gnuplot  -e  " set  terminal dumb; plot 'out.data' using 9 w l "

                                                                               
  1800 +-------------------------------------------------------------------+   
       |      + +     + + +      + + + +      |   
       |                                        'out.data' using 9 ******* |   
  1600 |-+                                                               +-|   
       |                                                                  *|   
       |                                                                  *|   
  1400 |-+                                                               +*|   
       |                                                                  *|   
       |                                                                  *|   
  1200 |-+                                                               +*|   
       |                                                                 * |   
  1000 |-+                                                               *-|   
       |                                                                 * |   
       |                                                                 * |   
   800 |-+                                                               *-|   
       |                                                                 * |   
       |                                                            ***** |   
   600 |-+                         *********************************     +-|   
       |   ************************                                        |   
       |***   + +     + + +      + + + +      |   
   400 +-------------------------------------------------------------------+   
       0      10 20    30 40 50     60 70 80 90    100  
                                                                               


另外一個會用到的選項就是 -H ( custom-header )
因為有些網站, 如果你沒有帶 User-agent 或是其他的  header 就會拒絕存取
可能會用到的有
  • -H  “Host: xxx.yyy.com.tw”
  • -H “Referer: https://xxx.com.tw/main/main.html”
  • -H “User-Agent: Mozilla AppleWebKit”
  • 這邊最有感的就是, 如果有存取到 CDN 服務的話, 那速度真的差很多

先記下來

~ enjoy it

Reference


週四
2019年09月05日


face
Cloudwatch + Alarm with EC2 CPU Utilization 測試小記

OS: Container with openSUSE Leap 15
EC2: openSUSE Leap 15.1 in AWS

今天來測試 Cloudwatch 目標是 EC2 instance 如果 CPU 使用率 超過 50% 達到一定的條件, 就送出警告

首先先建立 openSUSE Leap 

==== 在主機上面 ====

啟動 container

> docker  run  -v  ~/.aws:/root/.aws -v  ~/.azure:/root/.azure  -v ~/.config/gcloud:/root/.config/gcloud  -v  ~/.ssh:/root/.ssh  -it  sakana/ansible_opensuse15  /bin/bash

  • 這邊我有透過 -v 把本機上面的三個平台的設定檔掛載到容器內, 還有 .ssh 目錄 也掛載上面, 因為 google 的 SSH 金鑰 也會存放在裡面


==== 在 container 內 ====

參考之前的文章建立 openSUSE Leap 15.1 的 EC2 instance

查詢 openSUSE Leap 15.1 的 Image id
# aws  ec2  describe-images --filters 'Name=name,Values=openSUSE*'

查詢 Subnet id
# aws ec2 describe-subnets

security-group-ids 查詢方式
# aws  ec2  describe-security-groups

查詢 Key Pair
# aws  ec2  describe-key-pairs

啟動 openSUSE Leap 15.1 instance
# aws  ec2  run-instances --image-id  ami-036afe8f05ebda1fe  --subnet-id  subnet-92dfe4fb --security-group-ids sg-090a6648734644255  --instance-type  t2.micro --key-name  test-key --count  1


==== 在主機上面 ====

使用 ssh -i  test-key.pem  -l  ec2-user  SERVER_IP
看看是否可以登入

完成建立 EC2 instance


接下來設定 Cloudwatch
想法上就是 EC2 的 CPU 用量超過一定的條件就通知

登入 AWS Console

點選 服務 -- > Cloudwatch
點選 指標 -- > 點選 EC2


點選 每個執行個體指標



勾選要監控的 Instance 還有指定指標名稱為 CPUUtilization



點選 圖表化指標
點選 建立警示圖案 ( 鬧鈴 )



建立警示
時間的部分我使用預設值, 因為 5 分鐘是不用收費的, 可以參考 Cloudwatch 定價


設定 CPU 使用率 大於 50 %
3 次取樣有 2 次符合就警告
點選 下一步


通知的部分會結合 SNS 服務, 一定範圍內都是免費

點選 建立新主題 輸入要通知的電子郵件
點選 建立主題



點選 下一步

輸入 名稱
點選 下一步


在預覽畫面
點選 建立警示

完成 建立警示

可以觀察 Cloudwatch


如果要收到通知信, 就要去收 AWS SNS 寄來的信件, 並點選信內連結確認訂閱

最後來測試是否有作用

使用 ssh -i  test-key.pem  -l  ec2-user  SERVER_IP
登入 openSUSE Leap 15.1 instance in AWS

測試工具
  • stress-ng

切換為 root
> sudo  su  -

使用 zypper 安裝 stress-ng
# zypper  install  -y  stress-ng

使用 stress-ng 指令 壓測 CPU
# stress-ng  -c  2 --cpu-method  all

stress-ng: info:  [2920] defaulting to a 86400 second (1 day, 0.00 secs) run per stressor
stress-ng: info:  [2920] dispatching hogs: 2 cpu


在 Cloudwatch 上面觀察


靜待 10 mins ( 3 x 5分鐘, 裡面要有 2 個符合 CPU > 50 % )

達到條件就會變成警示中


檢查訂閱的電子郵件

確認收到通知 :)

完成 Lab

~ enjoy it

Reference:


週日
2019年08月18日


face
openSUSE Leap 15.1 安裝小記

openSUSE Leap 15.0 Lifetime 到 2019/11 

所以在處理完 COSCUP 議程之後, 就可以動手來安裝 openSUSE Leap 15.1 到我的桌機了

這次也是使用 USB 來進行安裝,  

== 安裝過程小記==

這次建立的時候我還是選擇 GNOME 桌面

磁碟區分割的部分, 使用 進階磁碟分割程式
  • / 大小為 60GB, 一樣使用 btrfs, 但是取消勾選”啟用快照”
  • swap 大小為 16GB
  • /boot/efi, 大小為 1GB, 使用 fat
  • /home 大小為剩下的所有空間(126 GB ), 使用 xfs ( 如果有勾選 )

安裝的內容, 我這次是全新安裝, 
  • 有鑒於之前 flatpak 的 bug 還有 snapper 佔用空間, 這次把 / 大小調整為 60GB, 然後取消啟用快照

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

Network Manager:

#yast2  lan
更該預設為 Network Manager


Google Chrome:

還是會有驗證性問題, 但是功能沒有差異
為了進行google 登入,先使用 Google 驗證App,  後面來處理yubikey

home 資料回覆:

因為有很多相關的 config 在個人家目錄內, 所以先把舊的 openSUSE Leap 15.0 的 /home 目錄, 使用# tar    cvf home.tar /home 進行打包到隨身碟 ( 不要使用 .gz 方式, 會比較快速 )
新機器再使用 tar 指令還原回來

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

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


中文輸入法問題:

在系統內新增中文輸入法, 目前使用 ibus
  • system_key( windows ) + 空白鍵 切換輸入法


取消 USB 為安裝來源
# yast2  repositories 


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

.mm 的檔案指定用 freemind  開啟


新增 Packman 套件庫:

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

#yast2  repositories

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

flash-player:
# zypper   install flash-player


播放器:

# zypper  install   vlc vlc-codecs

  • Mp4 codec 應該是要安裝 vlc-codecs,  需要 Packman 套件庫

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

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

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


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

# zypper  install youtube-dl

> 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
  • 下載軟體的 .tar.gz 然後以  root 安裝

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


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

使用 #yast2 sound 調整音效


GNOME Extension:

參考調校小記

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


Dropbox:

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

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

裝好之後才發現, 現在 linux 又支援 XFS …..

修改 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

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

ansible 安裝:

目前版本 2.8.1
#zypper  install ansible

Docker 安裝:

目前版本 18.09.6-ce
#zypper  install  docker

將使用者 sakana  加入 docker 群組 

#systemctl  start  docker
#systemctl  enable   docker


VMware workstation Pro 15:

安裝 kernel-default-devel  
# zypper   install   kernel-default-devel kernel-source
# ./VMware-Workstation-Full-15.1.0-13591040.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




smartgit 安裝:

下載 smartgit-linux-19_1_1.tar.gz

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

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

安裝 git
# zypper  install  git

建立 個人的 ssh key ( 這次沒有作, 因為將舊的 /home 還原回來 )
> ssh-keygen  -t dsa

將 ssh 的公鑰 id_dsa.pub 新增到 Github 的 Settings -- >  SSH and GPG Keys ( 這次沒有作, 因為將舊的 /home 還原回來 )

接下來就是以一般使用者的身份執行 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

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






Azure-cli 安裝:

版本: 2.0.71

週五
2019年08月09日


face
Azure Storage Explorer with openSUSE Leap 15 小記


OS: openSUSE Leap 15
Azure Storage Explorer: 1.9.0
Dotnet-sdk: 2.1.801-1


Azure Storage Explorer 官方網站


使用一般使用者
下載 Linux 版本的 Azure Storage Explorer ( StorageExplorer-linux-x64.tar.gz )


解壓縮檔案
> tar  zxvf  StorageExplorer-linux-x64.tar.gz


觀察相關資訊
> ls
blink_image_resources_200_percent.pak  icudtl.dat locales resources          StorageExplorer-linux-x64.tar.gz
content_resources_200_percent.pak      libffmpeg.so natives_blob.bin snapshot_blob.bin  ui_resources_200_percent.pak
content_shell.pak                      libnode.so pdf_viewer_resources.pak StorageExplorer    views_resources_200_percent.pak


嘗試執行 StorageExplorer
> ./StorageExplorer




被告知要有 .NET Core 2.0 才能執行 :)


  • 上面只列出 Ubuntu 14.04 ~ Ubuntu 18.04




相關的相依項目有
  • .NET core 2.0 執行階段
  • libgconf-2-4
  • libgnome-keyring0 或 libgnome-keyring-dev
  • libgnome-keyring-common


先來處理 .NET core 2.0 , 參考官方文件


按照比較新的日期, 我安裝的是 .NET Core SDK 2.1.202
Linux 相關網頁


上面雖然是 openSUSE Leap, 可是內容是 openSUSE Leap 42.2 , 而我目前用的是 Leap 15


根據上面的方式改為 openSUSE Leap 15 


使用管理者 root


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


下載 .repo 檔案
# wget  -q  https://packages.microsoft.com/config/opensuse/15/prod.repo


將 .repo 檔案移動到 /etc/zypp/repos.d 目錄下, 並更改名稱
# mv  prod.repo   /etc/zypp/repos.d/microsoft-prod.repo

透過 zypper update 指令去更新儲存庫,  我覺得用 zypper refresh 應該也可以
# zypper   update


Building repository 'packages-microsoft-com-prod' cache ...............................................................[done]
Loading repository data...


# zypper install libunwind libicu


Loading repository data...
Warning: Repository 'openSUSE-Leap-15.0-Update-Non-Oss' appears to be outdated. Consider using a different mirror or server.
Reading installed packages...
'libicu' not found in package names. Trying capabilities.
'libicu60_2' providing 'libicu' is already installed.
'libunwind' is already installed.
No update candidate for 'libunwind-1.2.1-lp150.2.1.x86_64'. The highest available version is already installed.
Resolving package dependencies...


Nothing to do.


  • 這邊看到 libicu 在 openSUSE Leap 15 應該是由 libicu60_2 提供


安裝前先搜尋一下
# zypper search -s dotnet-sdk


Loading repository data...
Warning: Repository 'openSUSE-Leap-15.0-Update-Non-Oss' appears to be outdated. Consider using a different mirror or server.
Reading installed packages...


S | Name           | Type | Version   | Arch | Repository                 
--+----------------+---------+-----------+--------+----------------------------
  | dotnet-sdk-2.1 | package | 2.1.801-1 | x86_64 | packages-microsoft-com-prod
  | dotnet-sdk-2.1 | package | 2.1.701-1 | x86_64 | packages-microsoft-com-prod
  | dotnet-sdk-2.1 | package | 2.1.605-1 | x86_64 | packages-microsoft-com-prod
  | dotnet-sdk-2.1 | package | 2.1.603-1 | x86_64 | packages-microsoft-com-prod
  | dotnet-sdk-2.1 | package | 2.1.508-1 | x86_64 | packages-microsoft-com-prod
  | dotnet-sdk-2.2 | package | 2.2.401-1 | x86_64 | packages-microsoft-com-prod
  | dotnet-sdk-2.2 | package | 2.2.301-1 | x86_64 | packages-microsoft-com-prod
  | dotnet-sdk-2.2 | package | 2.2.205-1 | x86_64 | packages-microsoft-com-prod
  | dotnet-sdk-2.2 | package | 2.2.203-1 | x86_64 | packages-microsoft-com-prod
  | dotnet-sdk-2.2 | package | 2.2.108-1 | x86_64 | packages-microsoft-com-prod
  | dotnet-sdk-2.2 | package | 2.2.107-1 | x86_64 | packages-microsoft-com-prod


這邊其實會看到 有 2.1 與 2.2 版本
我決定先裝 2.1 版本


# zypper  install  dotnet-sdk-2.1
Loading repository data...
Warning: Repository 'openSUSE-Leap-15.0-Update-Non-Oss' appears to be outdated. Consider using a different mirror or server.
Reading installed packages...
Resolving package dependencies...


The following 7 NEW packages are going to be installed:
  aspnetcore-runtime-2.1 dotnet-host dotnet-hostfxr-2.1 dotnet-runtime-2.1 dotnet-runtime-deps-2.1 dotnet-sdk-2.1
  libopenssl1_0_0


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


安裝完 .NET core 接下來試試看是否可以執行 Storage Explorer


使用一般使用者
嘗試執行 StorageExplorer
> ./StorageExplorer


Cool, 可以執行了
點選 I Accept 接受授權



接下來點選連接 Azure Storage 的方式
我先用 Add an Azure Account  -- > 點選 Next




接下來會要求登入 Microsoft Azure



接下來就可以看到 Microsoft Azure Storage Explorer 的操作畫面




接下來進行相關實驗


登入 Azure

週六
2019年07月27日


face
使用 gcloud 建立 openSUSE Leap 15 GCE with startup-script 小記

上一篇 Blog 寫 AWS CLI with userdata, 這一篇來寫 使用 gcloud 建立 openSUSE Leap 15 的 GCE ( Google Compute Engine ) 加上 startup-script ( 開機指令碼 )

目的跟之前一樣, 就是建立 VM ( 就是 GCE ) 的同時, 設定建立完成要執行的指令

OS: Container with openSUSE Leap 15
GCE: openSUSE Leap 15 on GCP

==== 在主機上面 ====

啟動 container

> docker  run  -v  ~/.aws:/root/.aws -v  ~/.azure:/root/.azure  -v ~/.config/gcloud:/root/.config/gcloud  -v  ~/.ssh:/root/.ssh  -it  sakana/ansible_opensuse15  /bin/bash

  • 這邊我有透過 -v 把本機上面的三個平台的設定檔掛載到容器內, 還有 .ssh 目錄 也掛載上面, 因為 google 的 SSH 金鑰 也會存放在裡面


==== 在 container 內 ====

參考官方文件

可以使用 --metadata-from-file 以及 startup-script 方式來指定

建立一個 default_startup-script 內容如下

#!/bin/bash
# edit by sakana 2019/7/27
# Turn on password authentication for lab challenge
# not use passwd --stdin because some OS not support
#echo 'lab-password' | passwd ec2-user --stdin
# Use chpasswd to change password 
# example: useradd -m ansible && echo "ansible:2016StudyArea" | chpasswd
useradd -m css-user
echo "css-user:20190727GCE" | chpasswd

# force user change password when first login
passwd -e css-user
#
sed -i 's|[#]*PasswordAuthentication no|PasswordAuthentication yes|g' /etc/ssh/sshd_config
systemctl restart sshd.service

  • 這邊我有實驗過, 不可以將兩個指令用 && 串接, 會失敗, 所以就先拆開為兩行, 以後再找原因

使用 gcloud 指令建立 openSUSE Leap 15 的 GCE ( VM )

# gcloud  compute  --project=sakanatest  instances  create  --zone=asia-east1-b  --machine-type=n1-standard-1  --image-project=opensuse-cloud  --image-family opensuse-leap --boot-disk-size=30GB --metadata-from-file startup-script=GCP/startup-script/default_startup-script  test20190727

  • --project 是因為我有多個 profile 所以指定那一個專案
  • 使用指定 --image-family 方式來取得最新的 image, 而不是 --image 指定某個版本 image 


接下來驗證是否成功

==== 在主機上面 ====

使用 ssh  -l css-user@SERVER_IP
看看是否可以登入, 如果可以就是大功告成

~ enjoy it



Reference:



face
AWS  CLI 指令建立 EC2 機器 with Userdata 小記


之前有使用 aws cli 建立 EC2, 但是建立 EC2 之後會有後續想要進行的動作, 例如安裝套件或是其他的要求, 這個部份其實可以在安裝的時候透過 userdata 來指定, 這一篇小記就是紀錄 aws-cli 建立 EC2 加上 userdata 作法.


一樣使用之前建立的 Container with 雲平台工具


OS: Container with openSUSE Leap 15


==== 在主機上面 ====


啟動 container


> docker  run  -v  ~/.aws:/root/.aws -v  ~/.azure:/root/.azure  -v ~/.config/gcloud:/root/.config/gcloud  -v  ~/.ssh:/root/.ssh  -it  sakana/ansible_opensuse15  /bin/bash


==== 在 container 內 ====


參考官方文件


官方文件提到可以搭配 --user-data 參數使用 run-instances


先來看看這次要實驗的 defaul_userdata 檔案內容


#!/bin/bash
# Turn on password authentication for lab challenge
# not use passwd --stdin because some OS not support
#echo 'lab-password' | passwd ec2-user --stdin
# Use chpasswd to change password 
# example: useradd -m ansible && echo "ansible:2016StudyArea" | chpasswd
echo "ec2-user:2019TestEC2" | chpasswd
sed -i 's|[#]*PasswordAuthentication no|PasswordAuthentication yes|g' /etc/ssh/sshd_config
systemctl restart sshd.service


  • 將 ec2-user 密碼設定為 lab-password
  • 開啟 sshd 使用密碼驗證, 重啟 sshd 服務讓設定生效
  • 在容器內中文註解有問題, 所以我先把註解用英文


接下來準備建立 EC2, 參考之前的文章


這邊有些需要的資訊, 可以使用指令的方式, 也可以使用 console 方式來取的
  • Image-id
    • # aws  ec2  describe-images  --filters  'Name=name,Values=openSUSE*'
  • Subnet-id
    • # aws  ec2  describe-subnets
  • Security-group-id
    • # aws  ec2  describe-security-groups
  • Key-name
    • # aws ec2 describe-key-pairs

執行 aws 指令建立 EC2


# aws  ec2  run-instances --image-id  ami-026fef571e7830801 --subnet-id  subnet-92dfe4fb --security-group-ids sg-090a6648734644255  --instance-type  t2.micro --key-name  test-key --count  1 --user-data  file://AWS/user-data/default_userdata


接下來驗證是否成功


==== 在主機上面 ====


使用 ssh  -l ec2-user@SERVER_IP
看看是否可以登入, 如果可以就是大功告成


~ enjoy it

Reference:


週六
2019年07月20日


face
AWS 以console 及 aws-cli 新增IAM使用者小記

有些專案, 同事需要有 AWS console 登入檢視相關資訊的需求
寫一篇小記紀錄如何建立使用者然後給予相關權限

======== Console 方式 ========

登入 AWS Console -- > 點選 IAM 服務  -- > 點選 使用者

點選 新增使用者
輸入 使用者名稱 , 勾選 AWS Management Console 存取, 設定密碼 
確認 使用者必須在下次登入時建立新的密碼已經勾選
點選 下一個:許可


這次要建立的是只有 EC2 檢視的使用者, 官方建議使用群組的方式來管理
在 設定許可畫面中 , 點選建立群組

輸入群組名稱, 以這邊為例 EC2ReadOnlyAccess
搜尋 EC2Re 可以找到 AmazonEC2ReadOnlyAccess 政策
勾選 AmazonEC2ReadOnlyAccess 政策 -- > 建立群組 

確認 EC2ReadOnlyAccess 群組已經勾選 -- > 點選 下一個:標籤


標籤的部份, 因為在Console 沒有辦法輸入中文, 實物上可能有相關需求, 所以我是之後使用指令來完成, 點選 下一個:檢閱


再次瀏覽相關資訊 
點選 建立使用者
點選關閉 完成設定

接下來進行驗證

另外開啟新的瀏覽器到 AWS 登入Console
以剛剛建立好的使用者登入, 
可以嘗試進行相關動作, 但是因為沒有相關權限, 所以應該會得到相關錯誤訊息



另外一種方式是使用指令的方式

======== Console 方式 ========

一樣使用之前建立的 Container with 雲平台工具

OS: Container with openSUSE Leap 15

==== 在主機上面 ====

啟動 container

> docker  run  -v  ~/.aws:/root/.aws -v  ~/.azure:/root/.azure  -v ~/.config/gcloud:/root/.config/gcloud  -v  ~/.ssh:/root/.ssh  -it  sakana/ansible_opensuse15  /bin/bash

==== 在 container 內 ====

參考官方文件

建立使用者

# aws  iam  create-user --user-name  max

{
    "User": {
        "UserName": "max", 
        "Path": "/", 
        "CreateDate": "2019-07-20T03:41:17Z", 
        "UserId": "AIDA2MGTTTNPHXG2DWTKL", 
        "Arn": "arn:aws:iam::781126831704:user/max"
    }
}

給予 console login 權限

# aws iam create-login-profile --user-name max --password YOURPW  --password-reset-required

{
    "LoginProfile": {
        "UserName": "max", 
        "CreateDate": "2019-07-20T03:47:35Z", 
        "PasswordResetRequired": true
    }
}


接下來就是建立群組, 讓使用者加入還有設定政策

# aws  iam  create-group  --group-name EC2ReadOnlyAccess

{
    "Group": {
        "Path": "/", 
        "CreateDate": "2019-07-20T03:54:14Z", 
        "GroupId": "AGPA2MGTWTNTKQRGBFF7U", 
        "Arn": "arn:aws:iam::781126831704:group/EC2ReadOnlyAccess", 
        "GroupName": "EC2ReadOnlyAccess"
    }
}


將政策( Policy ) 加入到群組
在加入政策之前要先先找到相關 政策還有他的 ARN

先觀察相關資訊, 先列出兩個
#aws  iam  list-policies --max-items 2

{
         "Policies": [
        {
                "PolicyName": "AdministratorAccess",
                "CreateDate": "2015-02-06T18:39:46Z",
                "AttachmentCount": 5,
                "IsAttachable": true,
                "PolicyId": "ANPAIWMBCKSKIEE64ZLYK",
                "DefaultVersionId": "v1",
                "Path": "/",
                "Arn": "arn:aws:iam::aws:policy/AdministratorAccess",
                "UpdateDate": "2015-02-06T18:39:46Z"
              },
              {
                "PolicyName": "ASamplePolicy",
        "CreateDate": "2015-06-17T19:23;32Z",
        "AttachmentCount": "0",
        "IsAttachable": "true",
                "PolicyId": "Z27SI6FQMGNQ2EXAMPLE1",
        "DefaultVersionId": "v1",
                "Path": "/",
                "Arn": "arn:aws:iam::781126831704:policy/ASamplePolicy",
                "UpdateDate": "2015-06-17T19:23:32Z"
              }
        ]
}

  • 這邊可以觀察到有 2 種 ARN, 官方ARN以及有帶 使用者帳號ID 的 ARN 

實務上我會使用 list-policies 加上 egrep 方式來找出我想要的
例如 # aws iam list-policies | egrep  '*EC2*' 

這次的作法是要找出 EC2 然後 ReadOnly
所以我會這樣搭配

# aws  iam  list-policies | egrep  -i   '*EC2*ReadOnly*'

            "PolicyName": "AmazonEC2ReadOnlyAccess", 
            "Arn": "arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess", 

  • 這邊一定要用 egrep 而不是 grep

接下來把 找到的 AmazonEC2ReadOnlyAccess 政策套用到群組

# aws  iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess --group-name  EC2ReadOnlyAccess

最後就是把使用者加到群組

# aws  iam  add-user-to-group --user-name max --group-name EC2ReadOnlyAccess


先記下來
~ enjoy it

有關於 IAM 使用者 加上標籤可以參考之前的 Blog


Reference:


週五
2019年07月19日


face


使用 Ansible 安裝 netdata  on GCP 小記

OS: Container with openSUSE Leap 15


因為同事很習慣使用 netdata 觀察機器狀況, 所以就寫了一篇紀錄使用 Ansible 安裝 netdata 小記

Netdata

這次要實驗的機器是同事習慣的 CentOS 7 on GCP

Ansible 的部份是使用自己建立的 Container with openSUSE Leap 15 


==== 在主機上面 ====

啟動 container

> docker  run  -v  ~/.aws:/root/.aws -v  ~/.azure:/root/.azure  -v ~/.config/gcloud:/root/.config/gcloud  -v  ~/.ssh:/root/.ssh  -it  sakana/ansible_opensuse15  /bin/bash

  • 這邊我有透過 -v 把本機上面的三個平台的設定檔掛載到容器內, 還有 .ssh 目錄 也掛載上面, 因為 google 的 SSH 金鑰 也會存放在裡面


==== 在 container 內 ====

使用 gcloud 指令建立 CentOS 7 的 GCE ( VM )

# gcloud  compute  --project=sakanatest  instances  create  --zone=asia-east1-b  --machine-type=n1-standard-1  --image-project=centos-cloud  --image-family centos-7 --boot-disk-size=30GB  test20190718

  • --project 是因為我有多個 profile 所以指定那一個專案

檢查相關資訊

# gcloud  compute  instances  list

NAME               ZONE MACHINE_TYPE   PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
test20190718  asia-east1-b n1-standard-1                                   10.120.0.34 32.194.143.80 RUNNING


嘗試使用 gcloud 指令連線 SSH 到 GCE 

# gcloud  compute  ssh  sakana@test20190718  --zone  asia-east1-b

[sakana@test20190718 ~]$ 

  • 這邊要用 使用者@SERVER_NAME, 因為預設不允許讓 root 登入
  • 使用者帳號就要看當初 GCE 內的 SSH 金鑰使用者名稱

登出 GCE 回到 container 內

[sakana@test20190718 ~]$  exit

到這邊可以確認 gcloud 可以建立 GCE , 連線 SSH 到 GCE

接下來確認一下 在容器內也可以使用 SSH 私鑰 連線遠端的 GCE

# ssh  -i  /root/.ssh/google_compute_engine -l sakana  YOUR_VM_IP
[sakana@test20190718 ~]$ 


登出 GCE 回到 container 內

[sakana@test20190718 ~]$  exit

接下來進入 Ansible 的部份

hosts 檔案如下

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

test20190718  ansible_host=YOUR_VM_IP ansible_ssh_private_key_file=/root/.ssh/google_compute_engine

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

# 安裝 netdata
[netdata]
test20190718

先來進行基礎的 ping 測試

# ansible  -u  sakana  -m ping  test20190718

test20190718 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}


安裝 netdata 的 playbook 檔案 netdata_install.yml 檔案如下

---
# edit by sakana 2019/7/18
# 感謝亦德提供安裝的playbook 讓我修改
#########################################################  
#
#########################################################  

- name: Install netdata and run service
# use group
  hosts: netdata
#  sudo: True
  become: True

  tasks:
#    - name: test setup moudule
#      setup: filter=ansible_distribution

# 下載 netdata 安裝 script
    - name: downlaod netdata software
      get_url:
        url: https://my-netdata.io/kickstart.sh
        dest: /usr/local/src/

# 使用非互動的方式安裝 netdata
    - name: install netdata
      shell: bash /usr/local/src/kickstart.sh --dont-wait

    - name: clean yum cache
      shell: yum clean all
      args:
        warn: no

# 移除 kickstart.sh
    - name: remove netdata software
      shell: rm -rf /usr/local/src/kickstart.sh
      args:
        warn: no

# 修改 Global 的 history 為86400
    - name: change netdata.conf
      shell: sed -i '1,30s/# history = 3996/history = 86400/g' /etc/netdata/netdata.conf
      args:
        warn: no

# 重新啟動 netdata
    - name: restart and enable service netdata
      systemd:
        name: netdata
        state: restarted
        enabled: yes


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


使用 ansible-playbook  指令安裝 netdata

# ansible-playbook -u  sakana  netdata_install.yml 

到這邊 netdata 已經安裝完畢
剩下最後一個動作, 開啟該 GCE 的 firewall

使用 gcloud 指令建立 firewall 允許 netdata 預設 port  19999 存取

# gcloud   compute  --project  sakanatest  firewall-rules create  "netdata"  --source-ranges "YOUR_IP_RANGE" --allow  tcp:19999

開啟瀏覽器 http://YOUR_IP:19999


大功告成
在 GCP 上面又前進一步

~ enjoy it

結束實驗, 刪除相關資源

# gcloud  compute  instances delete  test20190718
# gcloud  compute  --project sakanatest  firewall-rules delete "netdata"

Reference:


週日
2019年07月07日


face
三大雲平台工具容器升級小記 with openSUSE Leap 15 container

OS: container with openSUSE Leap 15

awscli:  aws-cli/1.16.193
gcloud: Google Cloud SDK 252.0.0
azure-cli: 2.0.68

上次升級雲平台工具是 20190627, 短短不到 10 天, 因為以下需求今天又來進行升級 
  • azure 以及 aws 工具又有版本升級
  • 加上 aws 指令補齊以及修正 vim 針對中文顯示問題

==== 處理 container 內相關套件升級以及設定 ====

使用 docker run 啟動 container, 進入到 shell
  • docker run -v ~/.aws:/root/.aws -v ~/.azure:/root/.azure -v ~/.config/gcloud:/root/.config/gcloud  -it  sakana/ansible_opensuse15   /bin/bash

Azure 與 AWS 升級的部份參考之前的文章來進行升級

Vim 中文顯示問題處理

#vi   ~/.vimrc

加入相關設定
set encoding=utf8


AWS 指令補齊處理
  • 在 linux 內的處理方式跟 Mac 不一樣, 要用 source 的方式不是使用 complete

#vi  ~/.bashrc

加入相關設定
source   /usr/bin/aws_bash_completer
alias  ls=’ls --color-tty’

==== 處理 container 內相關套件升級以及設定  End ====


接下來進行 image 的 commit
首先觀察剛剛修改的 contaner ID

> docker  ps

CONTAINER ID        IMAGE         COMMAND CREATED             STATUS PORTS NAMES

9b8705c120fb        sakana/ansible_opensuse15   "/bin/bash" 5 minutes ago       Up 5 minutes optimistic_blackwell

使用 docker commit 指令建立新的 container image
> docker  commit  -m "upgrade cli"  -a  "sakana"  9b870  sakana/ansible_opensuse15:20190707

  • 9b870 為剛剛修改好的 container ID
  • 我這邊建立一個 container image 然後 tag name 為 20190707

觀察相關資訊
> docker images

REPOSITORY                  TAG IMAGE ID            CREATED SIZE
sakana/ansible_opensuse15   20190707 05a52c0a9d24        20 seconds ago 2.05GB
sakana/ansible_opensuse15   latest db3e48156fd3        9 days ago 1.68GB
opensuse/leap               15 48b19e84798d        2 months ago 103MB

使用 docker tag 指令將剛剛建立的 image tag 設為 latest
> docker  tag  05a52c0a9d24  sakana/ansible_opensuse15:latest

觀察相關資訊
> docker images

REPOSITORY                  TAG IMAGE ID            CREATED SIZE
sakana/ansible_opensuse15   20190707 05a52c0a9d24        About a minute ago   2.05GB
sakana/ansible_opensuse15   latest 05a52c0a9d24        About a minute ago   2.05GB
sakana/ansible_opensuse15   <none>              db3e48156fd3        9 days ago           1.68GB
opensuse/leap               15 48b19e84798d        2 months ago 103MB

從上面可以看出, 剛剛的 latest 已經被取代, 目前的 latest 是剛剛編輯的版本

為了日後使用, 接下來進行上傳動作

首先 進行 docker  login
> docker login


將剛剛的 image 上傳到 docker hub

> docker push sakana/ansible_opensuse15:20190707

> docker push sakana/ansible_opensuse15:latest

清除沒用到的相關資源
> docker  system  prune

啟動 container 進行相關測試
> docker run -v ~/.aws:/root/.aws -v ~/.azure:/root/.azure -v ~/.config/gcloud:/root/.config/gcloud  -it  sakana/ansible_opensuse15   /bin/bash

工具升級 ok / aws 補齊 ok / vim 中文 ok

~ enjoy it

Reference:


週五
2019年06月28日


face
三大雲平台工具升級 + awscli 指令補齊小記

OS: container with openSUSE Leap 15


上次建立容器化方式來管理雲平台是上個月5號, 這中間三個工具都有版本升級
今天就來寫一下工具升級的方式

首先是 aws cli, 因為使用 pip , 所以就使用 pip install  方式升級

# pip install awscli --upgrade

檢查版本
# aws  --version
aws-cli/1.16.189

接下來是 Google SDK (  gcloud ), 使用  gcloud  components update 方式升級

檢查版本
# gcloud  --version

Google Cloud SDK 240.0.0
bq 2.0.42
core 2019.03.22
gsutil 4.37

升級套件
# gcloud   components  update

檢查版本
# gcloud  --version

Google Cloud SDK 252.0.0
bq 2.0.43
core 2019.06.21
gsutil 4.39

最後是 Azure , 因為當初是將  repo 匯入到 openSUSE, 所以使用 zypper 處理

先更新 repo, 這個部分很重要因為azure 的套件庫預設沒有自動更新
# zypper  refresh
使用 zypper 升級套件
# zypper  update  -y  azure-cli

檢查版本
# az  --version
azure-cli                         2.0.67

同場加映: aws   命令補齊

OS: Mac 10.14.5
awscli:  1.16.157

因為在裝 Google Cloud SDK ( gcloud )  初始化的時候, 就會將 completion 功能整合進去
所以相對應 aws 指令, 沒有預設啟用 completion 就顯得不方便

參考官方網站
我是使用 Mac 10.14.5, shell 是 bash

所以做法上很簡單

啟用命令補齊
$complete -C  '/usr/local/bin/aws_completer'  aws

讓預設開終端機就執行 aws_completer
在 ~/.bash_profile 檔案內
加入
# this is for aws complete
complete -C '/usr/local/bin/aws_completer' aws

大功告成

~ enjoy it

Reference:


週二
2019年05月21日


face
使用 gcsfuse 掛載 google cloud storage with openSUSE Leap 小記  

OS:  openSUSE Leap 15 in Azure

今天要來實驗 gcsfuse 掛載 google cloud storage

gcsfuse 介紹:

Cloud Storage FUSE 是一種開發原始碼 FUSE 轉接器,可讓您在 Linux 或 macOS 系統上掛接 Cloud Storage 值區做為檔案系統,還可讓應用程式透過標準檔案系統語意上傳和下載 Cloud Storage 物件。Cloud Storage FUSE 可以在連結 Cloud Storage 的任何地方執行,包括 Google Compute Engine VM 或內部部署系統
要掛載 google cloud storage, 首先必須要建立一個 google cloud storage

參考之前的文章

建立 google cloud storage

> gsutil  mb -l asia-east1 gs://test20190521

Creating gs://test20190521/...

要掛載 google cloud storage, 必須要有相關驗證以及權限, 配合 gcsfuse 大概會有兩種方式
  • 使用 google 驗證
  • 使用 服務帳戶金鑰

今天要嘗試的是使用服務帳戶金鑰的方式

建立服務帳戶
登入  GCP console -- > IAM 與管理員
點選 服務帳戶
點選 CREATE SERVICE ACCOUNT


輸入帳戶名稱 / 說明
-- > 建立


選取服務帳戶權限 -- > 繼續
這邊我是給到 Storage Object Admin

點選 建立金鑰


選取金鑰類型, 我這邊選取 JSON
點選 建立


下載金鑰到機器上面
點選 完成

將 key 複製到 openSUSE /root 目錄下
  • 例如 $ scp steadfast-oadmin-adf10.json YOUR_USER@SERVER_IP:/home/YOUR_USER
  • steadfast-oadmin-adf10.json 是剛剛的金鑰

安裝 gcsfuse 套件
在 openSUSE Leap 15 in Azure
參考


> sudo zypper install curl fuse


> sudo rpm --install --nosignature -p gcsfuse-0.17.0-1.x86_64.rpm

觀察系統資訊
> df -h

Filesystem      Size Used Avail Use% Mounted on
devtmpfs        803M 0 803M   0% /dev
tmpfs           820M 0 820M   0% /dev/shm
tmpfs           820M 17M 803M   3% /run
tmpfs           820M 0 820M   0% /sys/fs/cgroup
/dev/sda2        29G 1.6G 28G 6% /
/dev/sda1      1014M 91M 924M   9% /boot
/dev/sdb1        40G 49M 38G 1% /mnt/resource
tmpfs           164M 0 164M   0% /run/user/1000


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

掛載 google cloud storage
# gcsfuse --key-file /root/steadfast-oadmin-adf10.json test20190521  /mnt/gstorage/

Using mount point: /mnt/gstorage
Opening GCS connection...
Opening bucket...
Mounting file system...
File system has been successfully mounted.

  • Bucket 前面不需要加上 gs://

再次觀察系統資訊

# df -h

Filesystem      Size Used Avail Use% Mounted on
devtmpfs        803M 0 803M   0% /dev
tmpfs           820M 0 820M   0% /dev/shm
tmpfs           820M 25M 795M   4% /run
tmpfs           820M 0 820M   0% /sys/fs/cgroup
/dev/sda2        29G 1.7G 28G 6% /
/dev/sda1      1014M 91M 924M   9% /boot
/dev/sdb1        40G 49M 38G 1% /mnt/resource
tmpfs           164M 0 164M   0% /run/user/1000
test20190521    1.0P 0 1.0P   0% /mnt/gstorage

最後就是把 gcsfuse 指令放到類似 rc.local , 做成 systemd  服務或是 利用 crontab 使用 @reboot 方式讓他開啟的時候掛載起來 :)


~  enjoy it

Reference:


週四
2019年05月16日


face
使用 AWS CLI 建立 openSUSE Leap 15 in AWS EC2 小記


OS: openSUSE Leap 15
AWS CLI: 1.16.135

測試 aws ec2 指令
> aws  ec2  describe-regions  --output  table


----------------------------------------------------------
|                     DescribeRegions             |
+--------------------------------------------------------+
||                        Regions    ||
|+-----------------------------------+------------------+|
||             Endpoint       | RegionName ||
|+-----------------------------------+------------------+|
||  ec2.eu-north-1.amazonaws.com     | eu-north-1 ||
||  ec2.ap-south-1.amazonaws.com     | ap-south-1 ||
||  ec2.eu-west-3.amazonaws.com      | eu-west-3 ||
||  ec2.eu-west-2.amazonaws.com      | eu-west-2 ||
||  ec2.eu-west-1.amazonaws.com      | eu-west-1 ||
||  ec2.ap-northeast-2.amazonaws.com |  ap-northeast-2 ||
||  ec2.ap-northeast-1.amazonaws.com |  ap-northeast-1 ||
||  ec2.sa-east-1.amazonaws.com      | sa-east-1 ||
||  ec2.ca-central-1.amazonaws.com   | ca-central-1 ||
||  ec2.ap-southeast-1.amazonaws.com |  ap-southeast-1 ||
||  ec2.ap-southeast-2.amazonaws.com |  ap-southeast-2 ||
||  ec2.eu-central-1.amazonaws.com   | eu-central-1 ||
||  ec2.us-east-1.amazonaws.com      | us-east-1 ||
||  ec2.us-east-2.amazonaws.com      | us-east-2 ||
||  ec2.us-west-1.amazonaws.com      | us-west-1 ||
||  ec2.us-west-2.amazonaws.com      | us-west-2 ||
|+-----------------------------------+------------------+|

嘗試使用 aws  ec2 指令建立 security group
這邊先嘗試不指定 vpc-id 的方式來建立, 觀察預設值
> aws  ec2  create-security-group  --group-name  test-sg  --description "Test security group"
{
   "GroupId": "sg-0408e6036599eee01"
}


建立起來的 Security Group 是建立在 US East (N. Virginia)


觀察之前 AWS 的設定
> cat  ~/.aws/config


[default]
region = us-east-1
output = json


因為之前有設定 default region 為 us-east-1 所以 security group 會建立到 N. Virginia


目前測試環境在 Ohio ( us-east-2 )
所以大概有兩種方式
  • 將 ~/.aws/config 的 default region 設定為 us-east-2
  • 使用 aws ec2 指令的時候加上 --vpc-id 選項


嘗試使用指令 刪除剛剛的 security group , 這邊我使用 --group-name 的方式
> aws  ec2  delete-security-group  --group-name  test-sg


那要如何知道 --vpc-id 呢, 可以使用 aws ec2 指令進行查詢


> aws  ec2  describe-vpcs
{
   "Vpcs": [
       {
           "CidrBlock": "172.31.0.0/16",
           "DhcpOptionsId": "dopt-eab73381",
           "State": "available",
           "VpcId": "vpc-c42535ac",
           "OwnerId": "781126831804",
           "InstanceTenancy": "default",
           "CidrBlockAssociationSet": [
               {
                   "AssociationId": "vpc-cidr-assoc-3efaf757",
                   "CidrBlock": "172.31.0.0/16",
                   "CidrBlockState": {
                       "State": "associated"
                   }
               }
           ],
           "IsDefault": true
       }
   ]
}


有了 vpc-id 接下來使用 aws ec2 指令建立 security group 測試
> aws  ec2  create-security-group  --group-name  test-sg  --vpc-id  vpc-c42535ac --description "Test cli"


{
   "GroupId": "sg-090a6648734644155"
}


接下來建立 規則, 開放 所有 IP 連線 port 22
> aws  ec2  authorize-security-group-ingress  --group-name  test-sg --protocol  tcp  --port 22 --cidr  0.0.0.0/0

接下來建立 Key Pair
使用 aws ec2 指令建立金鑰
> aws  ec2  create-key-pair  --key-name  test-key  --query  "KeyMaterial"  --output  text  > test-key.pem


  • --query "KeyMaterial" 參數只擷取您需要的輸出部分到 .pem 檔案


調整 key 的權限
> chmod  400  test-key.pem


接下來準備要建立 instance
但是開始之前還有一些資訊要知道的
  • image-id
  • subnet-id
  • security-group-ids


image-id  的查詢方式 這邊我以 openSUSE 為例
> aws  ec2  describe-images  --filters  'Name=name,Values=openSUSE*'




subnet-id 查詢方式
> aws  ec2  describe-subnets


security-group-ids 查詢方式
> aws  ec2  describe-security-groups


再來就是啟動 instances 了


> aws  ec2  run-instances --image-id  ami-026fef571e7830801 --subnet-id  subnet-92dfe4fb --security-group-ids sg-090a6648734644255  --instance-type  t2.micro --key-name  test-key --count  1


建立的時候會回應相關資訊, 其中會有 InstanceId


透過 aws ec2 指令查詢 Public IP address
> aws ec2  describe-instances --instance-ids  i-YOUR_InstanceID --query "Reservations[0].Instances[0].PublicIpAddress"


"18.223.195.175"


根據得到的 IP 進行連線


> ssh  -i  test-key.pem  ec2-user@18.223.195.175


The authenticity of host '18.223.195.175 (18.223.195.175)' can't be established.
ECDSA key fingerprint is SHA256:HbjDjHC5oNzXGWwKsmExV1VzUWWfCjvmYgTHlRWbcJk.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '18.223.195.175' (ECDSA) to the list of known hosts.
openSUSE Leap 15.0 x86-64


As "root" use the:
- zypper command for package management
- yast command for configuration management


Have a lot of fun...
ec2-user@ip-172-31-0-246:~>

這樣也算是多邁入 AWS 一小步
~ enjoy it


Reference:


週日
2019年05月12日


face
使用 Ansible 建立 容器化 GitLab with openSUSE in Azure 小記

OS: openSUSE Leap 15 in Azure

今天來測試使用 ansible 在 Azure 上面透過容器化的方式建立 GitLab

GitLab 官方建議規格

先來試試看網路上搜尋到的方式
首先試試看沒有掛在 volume 的方式

$docker  run  -d  --hostname  gitlab.example.com  -p  443:443  -p  80:80  --name  gitlab --restart always  gitlab/gitlab-ce:latest

這樣的方式可以將 GitLab 啟動起來, 沒有問題
接下來就要考慮如何將這一系列的動作用 Ansible 串起來了 :)

考量點有
  • 安裝容器服務以及啟動
  • 要有一個獨立磁碟將 container 的設定與資料存起來
    • 掛載起來的時候, 要進行切割分割區以及建立 file system
    • 掛載到指定目錄
  • 下載 gitlab-ce 的 container image 並執行他, 開通 port 80 and port 443
  • 以上的方式要以非互動的方式來進行

寫了一個 playbook 來進行 gitlab 的安裝
  • 使用 gitlab 群組來進行安裝
    • 因為想配合 Azure Dynamic Inventory 方式

檔案 gitlab_install.yml 內容如下

---
# edit by sakana 2019/5/12
#########################################################  
#
#
#########################################################  

- name: Install docker and run service
# use group
 hosts: gitlab
#  sudo: True
 become: True
 vars_prompt:
   - name: "hostname"
     prompt: "Enter gitlab hostname, ex: gitlab.example.com"
     private: no
     default: gitlab.example.com

   - name: "container_name"
     prompt: "Enter container name when we create, ex: gitlab"
     private: no
     default: gitlab

 tasks:
#    - name: test setup moudule
#      setup: filter=ansible_distribution

   - name: Install docker with openSUSE Leap
     zypper:
       name:
         - docker
         - curl
     when: ansible_distribution == "openSUSE Leap"

# 舊的方式 with_item 即將被棄用
#    - name: Install docker with openSUSE Leap
#      zypper: name={{ item }}
#      with_items:
#        - docker
#        - curl
#      when: ansible_distribution == "openSUSE Leap"

#######################################################
# 等到 openSUSE 測試完成再來測試 CentOS and Ubuntu
#
#    - name: Install docker with CentOS
#      yum: name={{ item }}
#      with_items:
#        - docker
#        - curl
#      when: ansible_distribution == "CentOS"

#    - name: Install docker with Ubuntu
#      apt: name={{ item }} update_cache=yes
#      with_items:
#        - docker.io
#        - curl
#      when: ansible_distribution == "Ubuntu"

  
#    - name: Create docker link with Ubuntu
#      shell: ln -sf /usr/bin/docker.io /usr/local/bin/docker
#      when: ansible_distribution == "Ubuntu"
#
######################################################


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

   - name: Set docker enable and run
     service: name=docker state=started enabled=yes

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

# 使用 parted 建立label
   - name: use parted to make label
     shell: parted /dev/sdc mklabel msdos
# 使用 parted 建立分割區, 要使用百分比的方式才能非互動
   - name: use parted create partition
     shell: parted /dev/sdc mkpart primary 0% 100%
# 建立 file system
   - name: use mkfs.xfs create file system
     shell: mkfs.xfs -f /dev/sdc1
# 使用 mount module 掛載, 寫入 /etc/fstab
   - name: mount /dev/sdc1 to /gitlab
     mount:
       path: /gitlab
       src: /dev/sdc1
       fstype: xfs
       state: mounted

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

   - name: use docker command to run
     shell: docker run -d --hostname {{ hostname }} -p 443:443 -p 80:80 --name {{ container_name }} --restart always gitlab/gitlab-ce:latest

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


建立方式
如果有使用 azure_rm.py 記得 chmod a+x azure_rm.py

我是使用 Azure Dynamic Inventory 方式

> ansible-playbook -i  azure_rm.py  --ask-pass  --ask-become-pass  -u  使用者名稱   gitlab_install.yml

  • 這個 playbook 目前沒有處理 security group, 暫時先用手動開, 後面視需求看要不要加進去

VM 所加掛的資料磁碟, 非互動方式的處理我是使用 parted 指令

==== parted 一些指令小記 ====

列出 /dev/sdc 上面的分割區
> parted  /dev/sdc  print

建立 label
超過 2TB 以上的
> parted  /dev/sdc mklabel  gpt

一般用
> parted  /dev/sdc mklabel msdos

建立分割區, 使用整顆硬碟
> parted  /dev/sdc  mkpart  primary 0%  100%

刪除第一個分割區
> parted  /dev/sdc rm  1

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

建立完機器, 最後的步驟就是
  • 在 Azure portal 上面開啟機器 security group 的 port 80


設定 GitLab root 密碼  -- > Change your password

就有一個 GitLab 實驗環境可以使用啦 :)

~ enjoy it

Reference:


週四
2019年05月09日


face
使用 ansible 管理 Azure Kubernetes Service (AKS) instance  小記

OS: openSUSE Leap 15
ansible: 2.7.10

之前的 Azure AKS instance 都是使用 az aks create 指令建立的

但是久了有的時候真的會一時忘記 az aks 指令要下哪些 …..
所以今天就參考官方網站用 ansible 寫了 playbook 來建立以及移除 AKS instance

建立 AKS instance:

我的 playbook 如下, 檔案名稱 azure_create_aks_instance.yml

---
# Azure AKS 相關測試
# edit by sakana 2019/5/9
- name: use when conditionals and setup module
 hosts: localhost
 connection: local
#
 vars_prompt:
   - name: "client_id"
     prompt: "Enter client_id"
     private: no

   - name: "client_secret"
     prompt: "Enter client_secret"
     private: no

   - name: "resource_group"
     prompt: "Enter resource group name"
     private: no
     default: sakanaK8s

   - name: "aks_instance_name"
     prompt: "Enter aks instance name"
     private: no
     default: test01

   - name: "aks_location"
     prompt: "Enter aks location"
     private: no
     default: eastus

   - name: "dns_prefix"
     prompt: "Enter aks dns_prefix"
     private: no
     default: sakanamax

   - name: "admin_username"
     prompt: "Enter admin user's name"
     private: no
     default: sakana

   - name: "aks_ssh_key"
     prompt: "Enter aks ssh public key"
     private: no

   - name: "aks_pool_name"
     prompt: "Enter aks pool name"
     private: no
     default: testsakana

   - name: "aks_count"
     prompt: "Enter how many node do you want to create?"
     private: no
     default: 1

   - name: "vm_size"
     prompt: "Enter vm size for each node"
     private: no
     default: Standard_B2s

 tasks:
  - name: Create AKS instance
    azure_rm_aks:
      name: "{{ aks_instance_name }}"
      resource_group: "{{ resource_group }}"
      dns_prefix: "{{ dns_prefix }}"
      linux_profile:
        admin_username: "{{ admin_username }}"
        ssh_key: "{{ aks_ssh_key }}"
      service_principal:
        client_id:     "{{ client_id }}"
        client_secret: "{{ client_secret }}"
      agent_pool_profiles:
        - name: "{{ aks_pool_name }}"
          count: "{{ aks_count }}"
          vm_size: "{{ vm_size }}"

建立方式

使用 ansible-playbook 指令建立

> ansible-playbook  azure_create_aks_instance.yml

依照詢問輸入相關資料就可以方便建立

建立完成之後我還是用 az ask 指令取得認證資訊 ( 從 web console 複製 )
> az  aks  get-credentials --resource-group  sakanaK8s --name  test01


接下來實驗

移除 AKS instance:
我的 playbook 如下, 檔案名稱 azure_remove_aks_instance.yml

---
# Azure AKS 相關測試
# edit by sakana 2019/5/9
- name: use when conditionals and setup module
 hosts: localhost
 connection: local
#
 vars_prompt:
   - name: "aks_instance_name"
     prompt: "Enter aks instance name you want to REMOVE"
     private: no
     default: test01

   - name: "resource_group"
     prompt: "Enter resource group name"
     private: no
     default: sakanaK8s

 tasks:
  - name: Remove AKS instance
    azure_rm_aks:
      name: "{{ aks_instance_name }}"
      resource_group: "{{ resource_group }}"
      state: absent


移除的時候一樣用 ansible-playbook 指令
> ansible-playbook  azure_remove_aks_instance.yml


這樣以後建立 AKS instance 就相對方便了

~ enjoy it
:)

Reference:


週日
2019年05月05日


face
使用容器化方式, 建立Ansible 與三大雲端平台工具 azure-cli , awscli 與 gcloud with openSUSE Leap 小記

OS: openSUSE Leap 15

上次整理了 ansible 與 azure-cli with openSUSE Leap 15 in container.
因為後面又有開始實驗 awscli 以及 gcloud (Google Cloud SDK) 工具

就想要把這三個雲端平台的工具整進容器內.

接下來整理三個雲端平台工具設定檔相關位置與資訊

Microsoft Azure:

Amazon AWS:

Google Cloud Platform

已經製作好 container image 在 docker hub 上

使用方式 ( 須先具備容器環境, 例如 docker 或是 podman, 以下範例使用 docker )

如果之前完全沒有使用過三大平台工具, 只是想要快速有 ansible 與相關工具( azure-cli, awscli, gcloud )
>  docker  run  -it  sakana/ansible_opensuse15   /bin/bash
  • 進到容器之後就可以開始使用, 接下來就是進行各平台的登入驗證, 將取得相關驗證並開始作業

如果已經有在平台進行驗證, 可以在 docker  run 的時候配合 -v 的選項, 將本機的設定檔掛載

> docker  run  -v  ~/.aws:/root/.aws  -v  ~/.azure:/root/.azure  -v  ~/.config/gcloud:/root/.config/gcloud  -it  sakana/ansible_opensuse15:2019050402  /bin/bash
  • 各個設定檔請參考上面的資訊
  • 我個人是還有 -v 掛載 playbook 目錄 :)

這樣以後使用各個平台的工具就方便多了 :)

~ enjoy it

Reference:


週六
2019年04月27日


face
使用 gsutil 工具建立 Google Cloud Storage in openSUSE Leap 15 小記

OS: openSUSE Leap 15



首先在 GCP 平台上面已經建立專案然後啟動計費
接下來是安裝 Google Cloud SDK, 參考

使用一般使用者開啟終端機
檢查 python 版本
> python  --version
Python 2.7.14

將目錄切換到使用者家目錄
>cd

  • 這邊會切換到家目錄的原因是, 之前練習安裝 Cloud SDK 的時候, 位置在 ~/下載 目錄
    • 遇到安裝時出現 “UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4” 這樣的錯誤訊息, 查了一下網路上的文章是編碼的問題, 將SDK 放在沒有中文的目錄路徑下就沒有問題了

下載 Cloud SDK


進行 SHA256 check SUM, 跟官方比對, 確認檔案無誤
> sha256sum   google-cloud-sdk-240.0.0-linux-x86_64.tar.gz

5b7ad4e2632c77d5643162af6e1a586d22c5da82fe4e2ec18c411c831c6f5a44  google-cloud-sdk-240.0.0-linux-x86_64.tar.gz

進行解壓縮
> tar  zxvf  google-cloud-sdk-240.0.0-linux-x86_64.tar.gz

安裝 google cloud SDK
> ./google-cloud-sdk/install.sh

Welcome to the Google Cloud SDK!

To help improve the quality of this product, we collect anonymized usage data
and anonymized stacktraces when crashes are encountered; additional information
is available at <https://cloud.google.com/sdk/usage-statistics>. You may choose
to opt out of this collection now (by choosing 'N' at the below prompt), or at
any time in the future by running the following command:

   gcloud config set disable_usage_reporting true

Do you want to help improve the Google Cloud SDK (Y/n)?

Your current Cloud SDK version is: 240.0.0
The latest available version is: 243.0.0

┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                                                   Components         │
├──────────────────┬──────────────────────────────────────────────────────┬──────────────────────────┬───────────┤
│      Status     │              Name   │ ID │   Size │
├──────────────────┼──────────────────────────────────────────────────────┼──────────────────────────┼───────────┤
│ Update Available │ BigQuery Command Line Tool                           │ bq │ < 1 MiB │
│ Update Available │ Cloud SDK Core Libraries                             │ core │ 10.2 MiB │
│ Update Available │ Cloud Storage Command Line Tool                      │ gsutil                   │   3.8 MiB │
│ Not Installed    │ App Engine Go Extensions                             │ app-engine-go │ 56.6 MiB │
│ Not Installed    │ Cloud Bigtable Command Line Tool                     │ cbt │ 6.4 MiB │
│ Not Installed    │ Cloud Bigtable Emulator                              │ bigtable │ 5.6 MiB │
│ Not Installed    │ Cloud Datalab Command Line Tool                      │ datalab │ < 1 MiB │
│ Not Installed    │ Cloud Datastore Emulator                             │ cloud-datastore-emulator │ 18.4 MiB │
│ Not Installed    │ Cloud Datastore Emulator (Legacy)                    │ gcd-emulator │ 38.1 MiB │
│ Not Installed    │ Cloud Firestore Emulator                             │ cloud-firestore-emulator │ 40.5 MiB │
│ Not Installed    │ Cloud Pub/Sub Emulator                               │ pubsub-emulator │ 33.4 MiB │
│ Not Installed    │ Cloud SQL Proxy                                    │ cloud_sql_proxy │ 3.8 MiB │
│ Not Installed    │ Emulator Reverse Proxy                               │ emulator-reverse-proxy │ 14.5 MiB │
│ Not Installed    │ Google Cloud Build Local Builder                     │ cloud-build-local │ 6.0 MiB │
│ Not Installed    │ Google Container Registry's Docker credential helper │ docker-credential-gcr    │ 1.8 MiB │
│ Not Installed    │ gcloud Alpha Commands                                │ alpha │ < 1 MiB │
│ Not Installed    │ gcloud Beta Commands                                 │ beta │ < 1 MiB │
│ Not Installed    │ gcloud app Java Extensions                           │ app-engine-java │ 104.8 MiB │
│ Not Installed    │ gcloud app PHP Extensions                            │ app-engine-php │ │
│ Not Installed    │ gcloud app Python Extensions                         │ app-engine-python │ 6.0 MiB │
│ Not Installed    │ gcloud app Python Extensions (Extra Libraries)       │ app-engine-python-extras │ 28.5 MiB │
│ Not Installed    │ kubectl                                    │ kubectl │ < 1 MiB │
└──────────────────┴──────────────────────────────────────────────────────┴──────────────────────────┴───────────┘
To install or remove components at your current SDK version [240.0.0], run:
 $ gcloud components install COMPONENT_ID
 $ gcloud components remove COMPONENT_ID

To update your SDK installation to the latest version [243.0.0], run:
 $ gcloud components update


Modify profile to update your $PATH and enable shell command
completion?

Do you want to continue (Y/n)?  Y

The Google Cloud SDK installer will now prompt you to update an rc
file to bring the Google Cloud CLIs into your environment.

Enter a path to an rc file

週四
2019年04月25日


face
openSUSE Leap 15 in Google Cloud Platform 小記

最近開始接觸 GCP, 簡單來說之後三個公有雲平台應該都會碰
這個星期去申請了 GCP 的免費帳號

開始使用 GCP 的服務, 當然是從建立 VM 開始

點選左上角的選單 -- > Compute Engine -- > VM 執行個體

右方會出現 建立 按鈕 -- > 點選 建立


在建立的頁面, 除了輸入 VM 名稱, 選取可以在台灣機房以外
OS 的選擇是在開機磁碟的映像檔 -- > 點選 變更 按鈕 ( 預設是 Debian GNU/Linux 9 )


這個時候發現預設的映像檔, 還有到 Marketplace 搜尋
都沒有 openSUSE !!

Google 了一下關鍵字 openSUSE Leap GCP
找到甘漢文寫的 Blog

參考他的文章

開啟 Google Cloud Shell

查詢 openSUSE 的 image
$gcloud  compute  images list --project  opensuse-cloud --no-standard-images

NAME                          PROJECT FAMILY DEPRECATED  STATUS
opensuse-leap-15-v20181106    opensuse-cloud opensuse-leap             READY
opensuse-leap-42-3-v20180116  opensuse-cloud opensuse-leap             READY

使用 gcloud compute instances create 指令建立 VM instance
$gcloud  compute  instances create  test20190425  --image-project  opensuse-cloud --image opensuse-leap-15-v20181106 --zone  asia-east1-a


接下來回到 VM執行個體觀察
點選 SSH 右方的下拉式方塊 -- >

接下來就可以在瀏覽器中操作 openSUSE Leap 15



這樣也算是前進一小步 with GCP
~ enjoy it
:)

Reference:



週四
2019年04月18日


face
ansible with openSUSE Leap 15 container image 建立小記

OS: openSUSE Leap 15


最近換了 MacAir 13 Mojave 10.14.4


嘗試在 Mac Mojave 上面裝 ansible[azure], 但是經歷了太多版本相容性的問題
-- > 放棄, 決定使用 openSUSE Leap 15 container 來解決


以下是我的 Dockerfile


# openSUSE Leap 15 with ansible, azure-cli
FROM opensuse/leap:15


# Author
# MAINTAINER 已經棄用, 之後要使用 LABEL 方式
LABEL maintainer="sakana@cycu.org.tw"


# Install python2-pip, upgrade pip, ansible[azure]
RUN zypper install -y python2-pip && \
 pip2 install --upgrade pip && \
 pip2 install ansible[azure]


# Install wget, download azure_rm.py, set permission
RUN zypper install -y wget && \
 wget  https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/azure_rm.py && \
 chmod a+x azure_rm.py


# Install azure-cli
RUN zypper install -y curl && \
 rpm --import https://packages.microsoft.com/keys/microsoft.asc && \
 zypper addrepo --name 'Azure CLI' --check https://packages.microsoft.com/yumrepos/azure-cli azure-cli && \
 zypper install --from azure-cli -y azure-cli


#install vim
RUN zypper install -y vim

使用 docker build 指令將他打包成 image 並上傳到 docker hub

要使用的方式很簡單, 預設的 Tag 為 latest
下載 docker image
> docker  pull  sakana/ansible_opensuse15


這個 image 包含
  • ansible
  • azure-cli
  • azure SDK
  • azure_rm.py ( Dynamic inventory 使用 )
    • 但是最近 Azure 改變驗證的方式, 所以目前 azure_rm.py 可能有點問題, 還需要觀察還有實驗
      • 原本驗證檔案是看 ~/.azure/credentials
      • 現在可能會去看 ~/.azure/azureProfile.json


使用方式很簡單


> docker  run  -it  sakana/ansible_opensuse15  /bin/bash


在 container 內執行  az login 指令
# az  login


  • 會被要求開啟瀏覽器進行帳號驗證
  • 驗證成功會自動建立 ~/.azure 目錄以及相關驗證檔案


接下來就可以開始使用 ansible 指令進行管理
日後計畫把  ansible with aws 或是 ansible with gcp 放進來


~ enjoy it


Reference:


週日
2019年04月14日


face
Ansible ec2_key module with openSUSE 小記

OS: openSUSE Leap 15
Ansible: 2.7.8

Requirements ( on host that executes module )
  • boto
  • boto3
  • Python >= 2.6

首先來查詢 boto 是否有安裝

# zypper  search  boto

Loading repository data...
Reading installed packages...

S | Name                          | Summary       | Type
--+-------------------------------+----------------------------------------+--------
i | google-roboto-fonts           | Mechanical yet friendly fonts       | package
 | google-roboto-mono-fonts      | Google Roboto Mono fonts         | package
 | python-gcs-oauth2-boto-plugin | GCE Storage plugin for OAuth2          | package
i | python2-boto                  | Amazon Web Services Library       | package
 | python2-boto3                 | Amazon Web Services Library         | package
 | python2-botocore              | Python interface for AWS         | package
 | python3-boto                  | Amazon Web Services Library         | package
 | python3-boto3                 | Amazon Web Services Library         | package


安裝 boto3
# pip  install  boto3

Requirement already satisfied: six>=1.5 in /usr/lib/python3.6/site-packages (from python-dateutil<3.0.0,>=2.1; python_version >= "2.7"->botocore<1.13.0,>=1.12.130->boto3) (1.11.0)
awscli 1.16.135 has requirement botocore==1.12.125, but you'll have botocore 1.12.130 which is incompatible.
Installing collected packages: botocore, boto3
 Found existing installation: botocore 1.12.125
   Uninstalling botocore-1.12.125:
     Successfully uninstalled botocore-1.12.125
Successfully installed boto3-1.9.130 botocore-1.12.130

有出現 awscli 1.16.135 要求 botocore 版本是 1.12.125 但是我們裝了 1.12.130
暫時先觀察一下

參考官方文件

連接的寫法像下列的方式
- hosts: localhost
 connection: local
 gather_facts: False

驗證的部份, 方式有兩種
  • 以 export 變數的方式
    • export AWS_ACCESS_KEY_ID='AK123'
    • export AWS_SECRET_ACCESS_KEY='abc123'
  • 存放在 playbook 中, 例如是 vars_file , 但是我覺得我會比較喜歡使用 vars_prompt , 但是缺點就是每個 ec2 moudle 都要寫 aws_access_key 與 aws_secret_key 這兩個參數
    • aws_access_key: "{{aws_access_key_id}}"
    • aws_secret_key: "{{aws_secret_access_key}}"




來建立一個測試用的 yaml 檔案
> vi   aws_create_ec2_key.yml

---
# AWS 相關測試
# edit by sakana 2019/4/14
# 官方建議的方式
- hosts: localhost
 connection: local
 gather_facts: False
#

 vars_prompt:
#要求使用者輸入 access key id 與 secret access key
   - name: "aws_access_key_id"
     prompt: "Enter aws_access_key_id"
     private: no

   - name: "aws_secret_access_key"
     prompt: "Enter aws_secret_access_key"
     private: no

   - name: "aws_region"
     prompt: "Enter AWS Region"
     private: no
     default: us-east-2

#詢問 key name</