Skip to content

Zeroplex 生活隨筆

軟體開發和生活瑣事

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

標籤: Linux

MySQL non-interactice installation

Posted on 2019 年 11 月 11 日2021 年 3 月 12 日 By 日落 在〈MySQL non-interactice installation〉中尚無留言

相信大家對這個畫面都不陌生:

除了 MySQL 5.7 的某幾個版本會自動產生 root 的 password 以外,大多都是在安裝時讓使用者自行輸入密碼。

但今天你不是手動安裝,而是寫 script 讓主機自行部屬,這下就麻煩了,因為你不可能每台主機都人工輸入密碼,另外像是 AWS 自動部屬的話,你大概連 console 都沒有。但若透過 debconf 是有機會做到完全自動安裝。

首先來安裝 debconf:

sudo apt-get install debconf

稍等為了讓大家看一下 deb 的 interactive mode 是怎麼撰寫的,在安裝 ar 套件:

sudo apt-get install binutils

今天要被我拿來操刀的是「mysql-community-server_5.7.27-1ubuntu18.04_amd64.deb」。先用 ar 把 deb 檔解開,可以看到同下方的檔案:

$ ls
control.tar.xz  data.tar.xz  debian-binary

這邊要解壓縮「tar xvf control.tar.xz」,解開後會多出幾個檔案:

$ ls
conffiles  config  control  debian-binary  postinst  postrm  preinst  prerm  templates

這邊只專注於「config」檔,其他檔案先不管。開啟「config」檔以後,大概可以看到幾個關鍵字,像是:

  • db_input
  • db_get
  • db_fset
  • mysql-community-server/root-pass

這幾個關鍵字和整個 shell script 就是用來和使用者互動的指令,也就是最上面看到的那張圖。經由 db_set + variable-name 就可以暫存使用者輸入的資料,接下來就透過這幾個變數來動手腳。

先告知 debconf 不使用互動的方式來安裝 deb:

export DEBIAN_FRONTEND="noninteractive"

既然沒有和使用者互動,理當不會有 root 密碼,但可透過「debconf-set-selections」的方式來幫 package 設定:

debconf-set-selections <<< "mysql-community-server/root-pass password root"

之後安裝時就不會出現使用者輸入提示視窗了:

dpkg -i mysql-community-server_5.7.27-1ubuntu18.04_amd64.deb
apt-get install -f  # 安裝需要的 dependedncy
apt --fix-broken -y install
Tags:Linux, MySQL

讓 less 可以顯示 ANSI 色彩

Posted on 2019 年 8 月 23 日2021 年 3 月 12 日 By 日落 在〈讓 less 可以顯示 ANSI 色彩〉中尚無留言

應該不少人有經驗,在使用 grep 時,要搜尋的關鍵字會用顏色 highlight 方便閱讀,例如:

$ ls -lh | grep php
-rw-rw-r--  1 zero zero  178 Aug 22 19:15 autoload.php
drwxrwxr-x  3 zero zero 4.0K Aug 22 19:01 cakephp
drwxrwxr-x  5 zero zero 4.0K Aug 22 19:01 phpdocumentor
drwxrwxr-x  3 zero zero 4.0K Aug 22 19:01 phpoffice
drwxrwxr-x  3 zero zero 4.0K Aug 22 19:01 phpoption
drwxrwxr-x  3 zero zero 4.0K Aug 22 19:01 phpseclib
drwxrwxr-x  3 zero zero 4.0K Aug 22 19:01 phpspec
drwxrwxr-x  8 zero zero 4.0K Aug 22 19:01 phpunit

不過如果因為列表很長,在把搜尋結果 pipe 給 less 以後,顏色就消失了。

這其實是 grep 這邊會判斷 output 到哪一種型態的 I/O,像是後面接的是 bash pipe,grep 就會自動移除 ANSI color 的 syntax,畢竟不知道 pipe 資料給誰,如果後者不支援 ANSI color 就會變成亂碼。

如果很確定 pipe 後面的指令、工具支援 ANSI color 的指令,就可以下參數要求 grep 輸出顏色。例如:

$ ls -lh | grep php --color=always | less
-rw-rw-r--  1 zero zero  178 Aug 22 19:15 autoload.php
drwxrwxr-x  3 zero zero 4.0K Aug 22 19:01 cakephp
drwxrwxr-x  5 zero zero 4.0K Aug 22 19:01 phpdocumentor
drwxrwxr-x  3 zero zero 4.0K Aug 22 19:01 phpoffice
drwxrwxr-x  3 zero zero 4.0K Aug 22 19:01 phpoption
drwxrwxr-x  3 zero zero 4.0K Aug 22 19:01 phpseclib
drwxrwxr-x  3 zero zero 4.0K Aug 22 19:01 phpspec
drwxrwxr-x  8 zero zero 4.0K Aug 22 19:01 phpunit
Tags:Bash, Linux

LibreOffice 加油啊

Posted on 2019 年 7 月 21 日2021 年 3 月 12 日 By 日落 在〈LibreOffice 加油啊〉中尚無留言

昨天鄰居想嘗試使用 Linux,大致上都沒什麼問題,但卡到二個點:

  • 輸入法:沒有順手的輸入法 (倉頡)
  • Office 文件工具組:LibreOffice 的操作實在很不直覺,從 M$ 跳到 LibreOffice 目前還沒聽過有人說好用的。
今天還是幫他改回 Windows 系統,實在可惜。
Tags:Linux, Microsoft

給台灣人的 Raspbian 懶人版映象檔

Posted on 2019 年 7 月 6 日2021 年 3 月 12 日 By 日落 在〈給台灣人的 Raspbian 懶人版映象檔〉中尚無留言

這幾天被 Raspbian 安裝搞得七葷八素,所以乾脆把幾個常用設定改好,直接打包給大家用。

我用的是 Raspbian Buster Lite:

  • Version: June 2019
  • Release Date: 2019-06-20
  • Kernal version: 4.19

我調整過的設定 (目標是接上電源線即可遠端操作):

  • Localization
    • Locale:en_US.utf8 + zh_TW.utf8
    • 時區:Asia/Taipei
    • 鍵盤對應:en (US)
    • Wify county:TW
  • SSH 預設啟動 (port 2222)
  • 有線網路自動 DHCP
  • /etc/apt/source.list 的 source 改為 NCHC (快超多)
  • 已經做過一次 apt-get update && apt-get upgrade
載點:https://mega.nz/#F!dR5EVABL!Nkynwg5ivQuRyRqpGz1Q4A

SHA1: 71664d5651d660077621f91b29edeecf4810a486
SHA256: 981a8ded523c30f06ec09292445255c55a862e5d756b4e0fff5f8d069ef35afa
Tags:Linux, Raspberry Pi, Raspbian

Build AWS EC2 for CodeDeploy

Posted on 2019 年 5 月 31 日2021 年 3 月 12 日 By 日落 在〈Build AWS EC2 for CodeDeploy〉中尚無留言

最後更新時間:2019/05/31

文章開頭先謝謝 ellery 大大,沒有你提醒,我大概會繼續通靈 debug 幾個禮拜 XD

先說明 CodeDeploy 大概的運作機制:

  1. 先設定好 EC2 的基本權限 (IAM)
  2. 要支援 CodeDeploy 的 EC2 instance 必須安裝 CodeDeploy agent (很重要,EC2 上 trigger event 都是靠這個 agent)
  3. 設定 CodeDeploy 上 Application 對應到的 EC2 instances
  4. User 先將打包好的 code 送到 S3 上存放
  5. 接下來 trigger application 上特定的  deploy-er,將特定版本的 code 從 S3 上派送到 EC2 instance 上
  6. EC2 instance 的 CodeDeploy agent 收到 event 以後,會按照 appspec.yml 中指定的動作來動作,操作完成會回傳 status 給 CodeDeploy。
  7. CodeDeploy 會在 pannel 顯示 deploy 的進度和狀態。

TL;DR


接下來這邊會用較為簡單的方法 (但較不安全 XD) 的說明,來建立支援 CodeDeploy 的 EC2 instance,並做一次 deployment。操作、設定會幾乎按照 AWS 的 document 上的進行,但會調整一些順序讓操作比較順暢。

IAM

該做的還是要做,逃也逃不掉。要先幫 EC2 建立一個支援 CodeDeploy 的 Role,EC2 需要從 S3 上面拉檔案,所以除了 CodeDeploy 的權限以外,也要開 S3 的權限。

這邊用最寬鬆的權限來做 demo,若需要更安全、仔細的設定說明,請參考 AWS docs。

圖 1-1:這個 role 是要給 EC2 用的,所以建立時要先選 EC2
圖 1-2:要支援自動部屬的 EC2 需要這二個 policy

接下來,CodeDeploy 的 deploy-er 也需要權限,所以要建立一個 Role 給 Deploy-er 使用。這個就比較簡單,直接使用 CodeDeploy 的 policy 即可。

圖 1-3:建立 CodeDeploy 用的 role
圖 1-4:這邊就只有一個 policy 沒得挑

S3 bucket

前文有提到,會把要 deploy 的檔案先放在 S3 上,所以需要開一個 bucket 供 CodeDeploy 存放檔案用。

按照一般步驟建立一個 s3 bucket,除了 bucket name 不要 conflict 以外,其他選項都用預設值即可。我這邊用的名稱是「deploy-for-qwe」:

圖 N-M:我還沒想到要打什麼註解 ….

EC2 設定

EC2 其實沒有太複雜的設定,主要就是需要安裝 CodeDeploy agent 而已。

在開機器時,要留意幾個地方,第一個是 instance 的 IAM role 必須是上一步驟建立給 EC2 可以 deploy 的 role:

圖 2-1:建立 EC2 instance 時要加上 role
圖 2-2:幫 EC2 加個 tag,之後操作會比較方便。可以隨意命名。

再來要幫 EC2 instance 安裝 CodeDeploy agent,這邊可以直接參考 AWS install the CodeDeploy agent 的文件說明。

CodeDeploy

切換到 CodeDeploy 的 console,直接按下「Create application」就對了:

圖 3-1:建立 application,供之後為不同 application 設定不同的操作
圖 3-2:CodeDeploy 支援不同的 platform,我這邊使用 EC2

接著建立 deployment group,這邊要選擇前面建立的 CodeDeployRole:

圖 3-3:記得要選擇 role

最後選擇預計要被 deployed 的 instance,這個時候建立 EC2 設定的 tag 就很有用了,可以一次選擇多個 instance 或是不同的群組:

圖 3-4:透過 tag 來選擇要 deploy 的 EC2 instance:佈署到「usage」為「deploy」的所有 instance

appsepec.yml

這個檔案主要用來記錄、控制佈署時要做的動作,包括停止服務、刪除 cache、把新的程式移動到指定的位置、initialize …. 等等。

appspec.yml 檔案必須放在專案的根目錄,appspec.yml 的撰寫方法可以參考 AWS – AppSpec File Example。

這邊不自己寫 appspec.yml,直接從 AWS 提供的 example 來測試即可。開啟 download resource kit file 頁面,為意選擇一個 example 下載並解壓縮,目錄看起來會像下面這個樣子:

$ tree
.
├── appspec.yml
├── index.html
├── LICENSE.txt
└── scripts
    ├── install_dependencies
    ├── start_server
    └── stop_server

appspec.yml 的檔案內容如下:

version: 0.0
os: linux
files:
  - source: /index.html
    destination: /var/www/html/
hooks:
  BeforeInstall:
    - location: scripts/install_dependencies
      timeout: 300
      runas: root
    - location: scripts/start_server
      timeout: 300
      runas: root
  ApplicationStop:
    - location: scripts/stop_server
      timeout: 300
      runas: root

「version」這個 key 是必要的,其他的 key 看不同的部屬環境而有不同。

這邊要 deploy 到 EC2 instance 上,所以改寫 appspec.yml 到最簡單的寫法:

version: 0.0
os: linux

files:
    - source: index.html
      destination: /var/www/html/

接著,透過 aws-cli 下指令將 source code 打包上傳到 s3 的 bucket 上:

aws deploy push 
  --application-name hello-world 
  --s3-location s3://deploy-for-qwe/hello.zip 
  --source .

藍色標記是需要依照前文自行設定的資料自行修改的文字。

指令成功執行以後,應會看到以下的 response:
To deploy with this revision, run:
aws deploy create-deployment –application-name hello-world –s3-location bucket=deploy-for-qwe,key=hello.zip,bundleType=zip,eTag=0bd6b5414d8315a960ab1256d33b4e9b –deployment-group-name <deployment-group-name> –deployment-config-name <deployment-config-name> –description <description>

既然 AWS 都要你照做了,就不用多想跟著下指令:

aws deploy create-deployment 
--application-name hello-world 
--s3-location bucket=deploy-for-qwe,key=hello.zip,bundleType=zip,eTag=0bd6b5414d8315a960ab1256d33b4e9b 
--deployment-group-name tmp-group

# 後半段非必要參數,所以我刪掉了

指令成功,會回傳 JSON data:

{   
    "deploymentId": "d-SDXUUDKFZ"
}

這個時候打開 CodeDeploy 的 Deployments,就會看到有 deploy 正在進行:

圖 4-1:透過指令送出的 deployment 需求正在進行中

執行完成,連到 EC2 instance 上,就可以看到 /var/www/html/ 目錄下多了一個 index.html 的檔案了,deploy 成功!

回到 local 端,對 index.html 的內容做個調整,再做一次 aws deploy push,這次回傳結果也差不多,不過注意紅色標記的部份:
To deploy with this revision, run:
aws deploy create-deployment –application-name hello-world –s3-location bucket=deploy-for-qwe,key=hello.zip,bundleType=zip,eTag=085f6c6ca293276a3072be2e8a5a7870 –deployment-group-name <deployment-group-name> –deployment-config-name <deployment-config-name> –description <description>

「eTag」的 hash 值已經和前一次不同了!

CodeDeploy 上,eTag 的值相當於 product version,不同的值代表不同的版本,所以有必要時可以快速透過 eTag 在個版本之間做切換:

圖 4-2:在 pannel 會自動帶出可以 deploy 的版本

希望這篇說明,可以幫你快速了解 AWS CodeDeploy 的功能以及設定、操作方式。

Tags:AWS, EC2, Linux

文章分頁

上一頁 1 ... 16 17 18 ... 33 下一頁

其他

關於我  (About me)

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD GCP Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Raspberry Pi Ubuntu Unix Vim Web Windows XD 作業系統 分享 好站推薦 專題 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.