歡迎光臨 Planet openSUSE

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

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


週日
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
   - name: "ec2_key_name"
     prompt: "Enter ec2 key name"
     private: no


 tasks:
   - name: Create EC2 key pair
     ec2_key:
       aws_access_key: "{{ aws_access_key_id }}"
       aws_secret_key: "{{ aws_secret_access_key }}"
       name: "{{ ec2_key_name }}"
       region: "{{ aws_region }}"
       state: present
#使用 register 之後來將 key 匯出  
     register: ec2_key_result

# 使用copy module 來將傳回的資訊複製成檔案, 並設定權限
   - name: Save private key
     copy:
       content: "{{ ec2_key_result.key.private_key }}"
       dest: "~/{{ec2_key_name}}.pem"
       mode: 0400




參考網路上的作法, 使用 register 搭配 copy module 來儲存 key 並設定 permission

來進行實際測試

> ansible-playbook  aws_create_ec2_key.yml

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

Enter aws_access_key_id:  輸入YOUR_ACCESS_KEY_ID
Enter aws_secret_access_key: 輸入YOUR_SECRET_ACCESS_KEY
Enter AWS Region [us-east-2]:
Enter ec2 key name: test20190414

PLAY [localhost] **********************************************************************************************************************************

TASK [Create EC2 key pair] ************************************************************************************************************************
changed: [localhost]

TASK [Save private key] ***************************************************************************************************************************
changed: [localhost]

PLAY RECAP ****************************************************************************************************************************************
localhost                  : ok=2 changed=2 unreachable=0    failed=0  

觀察相關資訊
按照我們 playbook 內的設定, 存放到使用者家目錄
> ls  -l   ~/test20190414.pem
-r-------- 1 sakana users 1670  4月 14 11:42 /home/sakana/test20190414.pem

也可以到 Manage Console 觀察


接下來用同樣的方式測試移除 EC2 Key pair

> vi   aws_remove_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
   - name: "ec2_key_name"
     prompt: "Enter ec2 key name"
     private: no


 tasks:
   - name: Create EC2 key pair
     ec2_key:
       aws_access_key: "{{ aws_access_key_id }}"
       aws_secret_key: "{{ aws_secret_access_key }}"
       name: "{{ ec2_key_name }}"
       region: "{{ aws_region }}"
       state: absent

主要就是 state 換成 absent

> ansible-playbook  aws_remove_ec2_key.yml

[WARNING]: provided hosts list

週六
2019年04月06日


face
AWS Elastic Load Balancing with openSUSE instance in AWS 測試小記

OS: openSUSE Leap 15
AWS CLI: 1.16.135

準備工作:

參考昨天自己的筆記建立兩個 openSUSE instances in AWS

因為要測試 Load Balancing
建立的 EC2 instance 分別隸屬於不同的 subnet ( 不同的 Availability Zone )


兩台 openSUSE Leap 15 instance ( 兩台 instances 都要做 )

==== 在 openSUSE instances 內 ====

切換成 root
>  sudo  su -

安裝 apache2 套件
# zypper  install  apache2

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

The following 11 NEW packages are going to be installed:
 apache2 apache2-prefork apache2-utils git-web libapr-util1 libapr1 libbrotlicommon1 libbrotlienc1 libgc1 system-user-wwwrun w3m

The following recommended package was automatically selected:
 w3m

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

啟動 apache 服務 ( Web )
# systemctl  start  apache2

觀察服務狀態
# systemctl  status  apache2

● apache2.service - The Apache Webserver
  Loaded: loaded (/usr/lib/systemd/system/apache2.service; disabled; vendor preset: disabled)
  Active: active (running) since Sat 2019-04-06 11:29:18 UTC; 3s ago
Main PID: 2000 (httpd-prefork)

設定開機啟動服務
# systemctl  enable  apache2

Created symlink /etc/systemd/system/httpd.service → /usr/lib/systemd/system/apache2.service.
Created symlink /etc/systemd/system/apache.service → /usr/lib/systemd/system/apache2.service.
Created symlink /etc/systemd/system/multi-user.target.wants/apache2.service → /usr/lib/systemd/system/apache2.service.

建立測試網頁 ( 不同 site 帶不同的數字 )
# vi   /srv/www/htdocs/index.html

<html> This is site 1 </html>

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

接下來在建立一個 security group 可以允許 port 80 連入

> aws ec2 create-security-group --group-name  testweb-sg  --description  "Test Web"

> aws ec2 authorize-security-group-ingress  --group-name  testweb-sg --protocol  tcp  --port  80 --cidr  0.0.0.0/0

接下來使用 aws 指令來將剛剛的 instance 掛上 test-sg ( port 22 ) 以及 testweb-sg ( port 80 )兩個 security group

針對兩個 instance 來修改
> aws ec2 modify-instance-attribute --instance-id  i-0563bb05f74c6d4d3 --groups "sg-09422cde3af0f76cb" "sg-0e725fc07ae70c8a8"

> aws ec2 modify-instance-attribute --instance-id i-06bfb784bea733d7b --groups "sg-09422cde3af0f76cb" "sg-0e725fc07ae70c8a8"

  • Instance-id 請換成自己的 id
  • --groups 後面請填上 security-group-id


測試網站存取
針對兩個 instance 的 Public IP 來存取




參考官方文件:

驗證是否有支援 ELB
> aws elbv2  help

如果有出現指令說明就是有支援

使用 aws 指令 建立 load balancer
> aws  elbv2  create-load-balancer  --name  test-elb --subnets  subnet-92dfe4fb subnet-e4e8989e  --security-groups  sg-0e725fc07ae70c8a8

  • 建立一個 test-elb, 與 2 個 subnet 和 1 個 security group

到 Manage console 觀察
目前的狀態是 provisioning ( 配置 )
Listeners 是空的


使用 aws 指令建立 target group
> aws  elbv2  create-target-group  --name  test-target  --protocol  HTTP --port  80  --vpc-id vpc-c42635ac

  • 這邊要指定 vpc-id 不能使用預設的方式

可以到 Manage console 觀察

順便觀察 Registered targets , 目前為空

接下來用 aws 指令將 instance 註冊到 target
> aws  elbv2  register-targets --target-group-arn arn:aws:elasticloadbalancing:us-east-2:772127831904:targetgroup/test-target/732b4ddaff306e56  --targets  Id=i-0563bb05f74c6d4d3  Id=i-06bfb784bea733d7b

  • Target-group-arn 用剛剛建立起來的 arn
  • --targets 後面接 2 個 openSUSE instance id

再次觀察 Registered targets


最後使用 aws 指令建立 listener

> aws  elbv2  create-listener --load-balancer-arn arn:aws:elasticloadbalancing:us-east-2:772127831904:loadbalancer/app/test-elb/00d35f538d194bd1  --protocol  HTTP  --port 80  --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-east-2:772127831904:targetgroup/test-target/742b4ddaff306e56


到 Manage Console 觀察 test-elb 的 Listeners


觀察  test-elb 的狀態為 active


點選 Description 觀察 DNS name 並複製 FQDN

開啟瀏覽器
使用 Load balancer 的 FQDN 進行存取測試, 應該會看到向不同 instance 進行存取


今天完成 AWS Load balaner 測試
也是再往前一小步

~ enjoy it


Reference:


週日
2019年03月31日


face
Flatpak 佔用過多系統空間處理小記

OS: openSUSE Leap 15
Flatpak : 0.10.4

家中工作的桌機是使用準系統 with SSD
今天早上收到 / 目錄已經 100 % 使用無可用空間嚇了一跳

使用  df -h 觀察

> df  -h

檔案系統        容量 已用 可用 已用% 掛載點
devtmpfs        7.8G 0 7.8G    0% /dev
tmpfs           7.8G 97M 7.7G    2% /dev/shm
tmpfs           7.8G 400M 7.4G    6% /run
tmpfs           7.8G 0 7.8G    0% /sys/fs/cgroup
/dev/sda2        40G 33G 0 100% /
/dev/sda2        40G 33G 0 100% /opt
/dev/sda2        40G 33G 0 100% /boot/grub2/i386-pc
/dev/sda1       500M 5.0M 495M    1% /boot/efi
/dev/sda2        40G 33G 0 100% /var
/dev/sda2        40G 33G 0 100% /tmp
/dev/sda2        40G 33G 0 100% /usr/local
/dev/sda3       185G 46G 140G   25% /home
/dev/sda2        40G 33G 0 100% /.snapshots
/dev/sda2        40G 33G 0 100% /boot/grub2/x86_64-efi

一開始是以為 /.snapshots 佔用太多空間
所以參考自己之前的筆記

使用 snapper list 指令列出 snapshot
# snapper   list

Type   | # | Pre # | Date                     | User | Cleanup | Description | Userdata     
-------+-----+-------+--------------------------+------+---------+-------------------+--------------
single | 0   | |                      | root | | current  |
single | 1   | | Sat Jun  9 11:15:49 2018 | root |         | 首個根文件系統 |
pre    | 341 |       | Thu Feb 14 18:40:24 2019 | root | number  | zypp(zypper) | important=yes
post   | 342 | 341   | Thu Feb 14 18:46:53 2019 | root | number  | | important=yes
pre    | 351 |       | Thu Feb 21 16:08:45 2019 | root | number  | zypp(packagekitd) | important=yes
post   | 352 | 351   | Thu Feb 21 16:10:24 2019 | root | number  | | important=yes
pre    | 355 |       | Wed Feb 27 23:12:58 2019 | root | number  | zypp(packagekitd) | important=yes
post   | 356 | 355   | Wed Feb 27 23:18:24 2019 | root | number  | | important=yes
pre    | 387 |       | Sun Mar 10 12:44:15 2019 | root | number  | zypp(packagekitd) | important=yes
post   | 388 | 387   | Sun Mar 10 12:45:46 2019 | root | number  | | important=yes
pre    | 391 |       | Tue Mar 19 00:05:35 2019 | root | number  | zypp(packagekitd) | important=yes
post   | 392 | 391   | Tue Mar 19 00:06:26 2019 | root | number  | | important=yes
pre    | 393 |       | Tue Mar 19 22:29:24 2019 | root | number  | zypp(packagekitd) | important=no
post   | 394 | 393   | Tue Mar 19 22:29:27 2019 | root | number  | | important=no
pre    | 395 |       | Tue Mar 19 23:26:49 2019 | root | number  | zypp(zypper) | important=no
post   | 396 | 395   | Tue Mar 19 23:27:11 2019 | root | number  | | important=no
pre    | 397 |       | Tue Mar 19 23:28:46 2019 | root | number  | zypp(zypper) | important=no
post   | 398 | 397   | Tue Mar 19 23:29:18 2019 | root | number  | | important=no
pre    | 399 |       | Tue Mar 19 23:35:50 2019 | root | number  | zypp(zypper) | important=no
post   | 400 | 399   | Tue Mar 19 23:35:55 2019 | root | number  | | important=no
pre    | 401 |       | Sat Mar 23 07:34:21 2019 | root | number  | zypp(packagekitd) | important=no
post   | 402 | 401   | Sat Mar 23 07:34:41 2019 | root | number  | | important=no
pre    | 403 |       | Sun Mar 31 07:49:14 2019 | root | number  | zypp(packagekitd) | important=yes


將上面不重要的 snapshot 刪除
# snapper  delete  392-401

再次觀察系統空間

# df  -h

Filesystem      Size Used Avail Use% Mounted on
devtmpfs        7.8G 0 7.8G   0% /dev
tmpfs           7.8G 105M 7.7G   2% /dev/shm
tmpfs           7.8G 408M 7.4G   6% /run
tmpfs           7.8G

週六
2019年03月30日


face
AWS CLI with openSUSE Leap 15 小記

最近開始接觸 AWS, 接下來要練習的就是使用 AWS 的 CLI

使用  pip 指令安裝 awscli
# pip  install  awscli

觀察版本資訊
> aws  --version
aws-cli/1.16.135 Python/3.6.5 Linux/4.12.14-lp150.12.48-default botocore/1.12.125

為了進行練習, 我在 IAM 建立一個使用者
  • 加入到 管理者群組
  • 只給 Access Key ( Programmatic access ) , 但是沒有勾選登入 AWS Management Console access

使用者的 Secret access key 只有建立的時候可以下載 .csv 或是複製上面的 key, 記得保存下來

進行相關設定
> aws  configure

輸入 Access Key 與 Secret Access Key
AWS Access Key ID [None]: AKIA3MGXVXNQDYZWXCT5
AWS Secret Access Key [None]: lZw3dL6qhQzsUSO5YU4oxWJyguclaNz0hX
Default region name [None]:
Default output format [None]:

觀察相關資訊, 就會發現家目錄下會建立 .aws 目錄
> ls  ~/.aws/
config  credentials

  • 這邊會發現到, 相關的 access key 會被存放到 ~/.aws/credentials
  • Default region 以及 output format 會被存放到 ~/.aws/config

觀察相關設定
> aws  configure  list
     Name                  Value Type  Location
     ----                  ----- ----  --------
  profile                <not set> None    None
access_key     ****************XCT5 shared-credentials-file    
secret_key     ****************z0hX shared-credentials-file    
   region                us-east-1 config-file    ~/.aws/config

指令的方式可以使用 aws  help 來查詢

使用 aws sc 指令建立 bucket, 這邊我建立一個 bucket 是 sakana-test

> aws  s3  mb  s3://sakana-test
make_bucket: sakana-test

  • mb 是建立 bucket 指令
  • s3:// 後面輸入要建立的 bucket 名稱

列出 S3 bucket
> aws  s3   ls
2019-03-30 22:24:44 sakana-test


這個時候也可以登入到 console 觀察


接下來測試將本機上面的圖片上傳道 S3 Bucket
> aws  s3  cp  2019-03-30.png    s3://sakana-test

upload: ./2019-03-30.png to s3://sakana-test/2019-03-30.png

到 Management Console 觀察

接下來嘗試將 S3 上面的檔案下載到本機

> aws  s3  cp  s3://sakana-test/2019-03-30.png   .

download: s3://sakana-test/2019-03-30.png to ./2019-03-30.png

接下來嘗試刪除 bucket

> aws  s3  rb  s3://sakana-test

remove_bucket failed: s3://sakana-test An error occurred (BucketNotEmpty) when calling the DeleteBucket operation: The bucket you tried to delete is not empty

這邊會產生錯誤的原因是  aws s3 rb 是針對空的 bucket 來進行刪除, 所以會產生錯誤訊息

如果真的確定 bucket 底下的物件真的不需要, 可以使用 --force 的方式在刪除 bucket 之前刪除底下的

> aws  s3  rb  s3://sakana-test  --force

delete: s3://sakana-test/2019-03-30.png
remove_bucket: sakana-test

觀察相關資訊
> aws  s3  ls
就會發現剛剛那個 bucket 已經被刪除了

這樣也算是往 AWS 又前進一小步

~ enjoy it

Reference:


週六
2019年03月16日


face
Migrate from openSUSE Leap to SUSE Linux Enterprise Server in Azure

OS: openSUSE Leap 15 in Azure

之前 openSUSE.Asia summit 2018 就有人發表 openSUSE Leap migrate 到 SLES, 今天看到有人 post 相關 link, 就想說來實際 Lab 一下.

按照官方網站的說明先說一下, 建議這樣的方式是在測試環境中執行 :)

升級路徑參考


開始之前先觀察相關資訊

# cat   /etc/*release

NAME="openSUSE Leap"
VERSION="15.0"
ID="opensuse-leap"
ID_LIKE="suse opensuse"
VERSION_ID="15.0"
PRETTY_NAME="openSUSE Leap 15.0"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:leap:15.0"
BUG_REPORT_URL="https://bugs.opensuse.org"
HOME_URL="https://www.opensuse.org/"


# zypper  lr

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

# | Alias                      | Name           | Enabled | GPG Check | Refresh
--+----------------------------+-----------------------------------------+---------+-----------+--------
1 | openSUSE-Leap-15.0--Debug  | openSUSE-Leap-15.0-Debug           | No | ---- | ----
2 | openSUSE-Leap-15.0-Non-Oss | openSUSE-Leap-15.0-Non-Oss              | Yes | ( p) Yes | Yes
3 | openSUSE-Leap-15.0-Oss     | openSUSE-Leap-15.0-Oss           | Yes | ( p) Yes | Yes
4 | openSUSE-Leap-15.0-Source  | openSUSE-Leap-15.0-Source           | No | ---- | ----
5 | openSUSE-Leap-15.0-Update  | openSUSE-Leap-15.0-Update           | Yes | ( p) Yes | Yes
6 | openSUSE-Leap-cloud-tools  | openSUSE-Leap-Cloud-Tools           | Yes | ( p) Yes | Yes
7 | repo-debug-update          | openSUSE-Leap-15.0-Update-Debug         | No | ---- | ----
8 | repo-debug-update-non-oss  | openSUSE-Leap-15.0-Update-Debug-Non-Oss | No      | ---- | ----
9 | repo-update-non-oss        | openSUSE-Leap-15.0-Update-Non-Oss       | Yes | ( p) Yes | Yes


# zypper  search SUSEConnect

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

S | Name        | Summary                                             | Type
--+-------------+------------------------------------------------------------+-----------
i | SUSEConnect | Utility to register a system with the SUSE Customer Center | package   

openSUSE Leap 15 in Azure 預設安裝 SUSEConnect
  • 我確認過我的 Desktop 預設沒有安裝 SUSEConnect

# zypper  search  yast2-brand

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

S | Name                           | Summary       | Type
--+--------------------------------+-----------------------------------------+--------
 | yast2-branding-openSUSE        | YaST2 - Theme (openSUSE)         | package
 | yast2-branding-openSUSE-Oxygen | YaST2 - switcher into Oxygen icon theme | package

openSUSE Leap 15 in Azure 預設沒有裝 yast2-branding-openSUSE相關套件
  • 我確認我的 Desktop 預設裝 yast2-branding-openSUSE


開始進行 Migrate 流程

安裝 SUSEConnect 套件 ( openSUSE Leap 15 in Azure 已經內建 )
# zypper  in  SUSEConnect

Loading repository data...
Reading installed packages...
'SUSEConnect' is already installed.
No update candidate for 'SUSEConnect-0.3.12-lp150.2.9.1.x86_64'. The highest available version is already installed.
Resolving package dependencies...

Nothing to do.

移除 yast2-brainding-openSUSE 相關套件 ( openSUSE Leap 15 in Azure 沒有裝 )
# rpm  -e  --nodeps yast2-branding-openSUSE
error: package yast2-branding-openSUSE is not installed

# rpm  -e  --nodeps yast2-branding-openSUSE-Oxygen

error: package yast2-branding-openSUSE-Oxygen is not installed

確認 SUSEConnect 註冊狀況

# SUSEConnect  -s
[{"identifier":"openSUSE","version":"15.0","arch":"x86_64","status":"Not Registered"}]


SUSEConnect 需要使用 REGISTRATION_CODE 來註冊, 如果沒有提供註冊碼會被提示要提供

# SUSEConnect  -p  SLES/15.0/x86_64

Please register your system using the --regcode parameter, or provide the --url parameter to register against SMT.

如何取得 SCC 帳戶還有試用註冊碼?
到這邊


選取 SLES 的版本還有硬體類型 ( 例如 AMD64 / Intel 64 )
填入相關資訊就可以取得


所以要到 SCC   https://scc.suse.com/login
登入到 SUSE Customer Center


如果有註冊碼, 可以在右邊 Activate subscriptions 啟用他


可以在 subscriptions 那邊觀察到已經被啟用



進行註冊
# SUSEConnect  -r  YOUR_REGIST_CODE -p  SLES/15.0/x86_64

Registered SLES 15.0 x86_64
To server: https://scc.suse.com
Successfully registered system.


確認 SUSEConnect 註冊狀況

# SUSEConnect  -s

[{"identifier":"SLES","version":"15","arch":"x86_64","status":"Registered","regcode":"YOUR_REGIST_CODE","starts_at":"2019-03-16 10:43:00 UTC","expires_at":"2019-05-15 10:43:00 UTC","subscription_status":"ACTIVE","type":"oem"}]

這邊就會發現已經註冊了, 然後也會看到到期日

# zypper lr

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

#  | Alias                                                                       | Name | Enabled | GPG Check | Refresh
---+-----------------------------------------------------------------------------+-----------------------------------------+---------+-----------+--------
1 | SUSE_Linux_Enterprise_Server_15_x86_64:SLE-Product-SLES15-Debuginfo-Pool    | SLE-Product-SLES15-Debuginfo-Pool | No | ---- | ----
2 | SUSE_Linux_Enterprise_Server_15_x86_64:SLE-Product-SLES15-Debuginfo-Updates | SLE-Product-SLES15-Debuginfo-Updates    | No | ---- | ----
3 | SUSE_Linux_Enterprise_Server_15_x86_64:SLE-Product-SLES15-Pool              | SLE-Product-SLES15-Pool | Yes | (r ) Yes | No
4 | SUSE_Linux_Enterprise_Server_15_x86_64:SLE-Product-SLES15-Source-Pool       | SLE-Product-SLES15-Source-Pool | No | ---- | ----
5 | SUSE_Linux_Enterprise_Server_15_x86_64:SLE-Product-SLES15-Updates           | SLE-Product-SLES15-Updates | Yes | (r ) Yes | Yes    
6 | openSUSE-Leap-15.0--Debug                                                   | openSUSE-Leap-15.0-Debug | No | ---- | ----
7 | openSUSE-Leap-15.0-Non-Oss                                                  | openSUSE-Leap-15.0-Non-Oss | Yes     | (r ) Yes  | Yes
8 | openSUSE-Leap-15.0-Oss                                                      | openSUSE-Leap-15.0-Oss | Yes     | (r ) Yes  | Yes
9 | openSUSE-Leap-15.0-Source                                                   | openSUSE-Leap-15.0-Source | No | ---- | ----
10 | openSUSE-Leap-15.0-Update                                                   | openSUSE-Leap-15.0-Update | Yes     | (r ) Yes  | Yes
11

週四
2019年03月07日


face
mariadb-client with openSUSE Leap 15 連線 MySQL in Azure 小記

OS: openSUSE Leap 15
MySQL:  5.7 in Azure

首先真的只能說讀書會惠我良多
因為 python 讀書會的關係, 最近要開始練習 python 與 SQL

書上的練習是使用免費的 db4free.net
  • 但是我註冊帳號之後, 都沒有收到認證信, 所以無法使用

接下來就把方向放在自己建立的 SQL 了
為了練習方便, 所以先往雲端上面走, 所以選擇 MySQL in Azure

參考官方文件

建立 MySQL 伺服器

建立資源 -- > 資料庫 -- > 適用於 MySQL 的 Azure 資料庫
建立的時候比較要注意的應該是定價層
因為是練習性質, 所以我選擇 基本 ( 因為建立完成之後就不能改 )
點選 建立


建立完成之後可以觀察 MySQL

  • 建立的時候預設, SSL 強制執行狀態為啟用
  • 有4個資料庫

加入連線 IP 以及 修改 SSL 設定

預設如果要連線到 MySQL 資料庫要手動設定連入 IP
選取資料庫左邊的連線安全性 -- > 點選 加入用戶端IP
  • 也可以手動輸入 IP 範圍
  • 但是點選加入用戶端IP 他會自動判斷你的 PUBLIC IP 然後直接加入, 真的很好用


另外在 SSL 設定的部份, 我也先停用 強制執行 SSL 連線
點選 儲存 完成設定

接下來回到 openSUSE Leap 15 這邊
我們要使用 mysql 指令來進行連線測試
  • 但是 mysql-server 套件目前預設沒有在 openSUSE Leap 內
  • 想法上我們只是要下指令, client side 的感覺

所以就進行 zypper  search mariadb 來觀察

# zypper  search  mariadb

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

S | Name                   | Summary                                         | Type
--+------------------------+-------------------------------------------------------------------+-----------
 | libmariadb-devel       | Development files for the MariaDB Connector C API                 | package
 | libmariadb3            | MariaDB connector in C                                           | package
 | libmariadb3-32bit      | MariaDB connector in C                                           | package
 | libmariadb_plugins     | Plugins for the MariaDB C Connector                               | package
 | libmariadbprivate      | Additional internal libraries for the MariaDB C Connector         | package
 | mariadb                | Server part of MariaDB                                           | package
 | mariadb                | Server part of MariaDB                                           | srcpackage
 | mariadb-bench          | Benchmarks for MariaDB                                           | package
 | mariadb-client         | Client for MariaDB                                                | package
 | mariadb-connector-c    | MariaDB connector in C                                           | srcpackage
 | mariadb-connector-odbc | MariaDB ODBC Connector                                            | package
 | mariadb-errormessages  | The error messages files required by server, client and libmysqld | package   
 | mariadb-galera         | The configuration files and scripts for galera replication        | package
 | mariadb-test           | Testsuite for MariaDB                                           | package
 | mariadb-tools          | MariaDB tools                                           | package

發現 mariadb-client 套件, 接下來進行安裝

# zypper