Skip to content

antony@notes:~/container$ cat "Alpine-Linux-詳細安裝說明.md"

Alpine Linux 詳細安裝說明

2022-07-10· container ·Alpine

Alpine Linux 詳細安裝說明

[TOC]

左下角鯨魚:Docker(碼頭工人),事實上是一間公司的名字,上面的方塊圖形是container(貨櫃)

container(貨櫃)

  • 一台container就是一台電腦
  • 一台實體電腦,可以同時執行很多台container
  • 在同樣的實體硬體規格,虛擬技術做出來10台的虛擬機器,container可以做出30台

左下角第二個圖, kubernetes(簡稱:k8s,因為k到s中間有8個字母) 它的圖示是一個船舵,他是雲端作業系統,功能是用來管理Container,以上的架構是新一代的系統工程

這套系統是google公司設計的,因為是google公司設計的,微軟沒有這種技術,現在真正技術主導的是Google、Amazon和Yahoo

Cloud Native Computing Foundation 負責推動雲原生技術,主導系統工程的網站

2022年電腦基礎概論,就是以上的系統工程架構

第三個圖示,和第四個圖示 Hadoop和Spark為資料工程,建立在系統工程之上,他們主要為企業做出分析,和AI人工智慧

之後可以找的工作: 1. 網路工程師 要會的技能:TCP/IP網路系統和Ip tables 2. 資料庫管理師(Database manager) 要會的技能:主軸在MySQL,SQL command,MySQL instance,CDC 以上兩者底層加分技術:linux和bash script


2022/04/20 複習前面的課程

下載Alpine

Standard

下載下來的都是光碟片(.iso),是把alpine linux裝在實體電腦裡面,實體電腦規格可以用5年前的電腦cpu i5(i3其實也可以) 記憶體 8GB, x86 是32位元 x86_64 是64位元

現在台灣大部分的網路工程師,是把Ubuntu裝在實體機器

為何使用Alpine Linux?

  • Alpine linux = Kernel + musl + busybox + apk * linux kernel,linux 的核心,能用 CPU、記憶體、硬碟和網路,有它才可以使用電腦 * musl ,C語言的程式庫,可以在alpine linux裡面用C語言設計要用的功能(linux 作業系統的核心大部分還是用C語言) * busybox ,800k的大小,可以模擬出linux 60幾個指令(像是cut、grep、zip…等) * apk ,全名alpine package ,如果原本沒有套件,可以透過apk add安裝 * 因為內容簡單,所以資安等級A,且舊的設備也可跑起來

台灣現況:Centos 也是一種linux系統,因內容眾多,只要系統一起來,就把防火牆和很多防護機制啟動,windows 10/11 也是

VIRTUAL

給VMware和linux KVM使用


啟動 VMware Workstation Player

建立 alp.takoyaki 虛擬主機

  1. 請選擇 “I will install the operating system later”, 開始建立 alp.takoyaki 虛擬主機

  2. Guest operating system 選擇 Linux, Version 為 Other Linux 5.x kernel 64-bit

    • 選Other Linux 5.x kernel 64-bit,是因為alpine 所使用的 kernel 為最新的 5 系列
  3. Virtual Machine name 設為 alp.takoyaki, Location 設為 c:\alp.takoyaki

  4. Maximum disk size (GB): 800, 點選 “Store virtual disk as a single file”,代表一個檔案最大可以到800 GB,算是單檔作業

  5. 點選 Customize Hardware 按鈕, 移除 Printer, Sound Card, USB Controller, 因為用不到還啟動他們會浪費運算資源

  6. 然後設定 New CD/DVD(IDE), 點選 Use ISO Image File, 選擇 alpine-virt-3.15.4-x86_64.iso,

  7. 點選 Processors, 勾選 Virtualize Intel VT-x/EPT or AMD-V/RVI

  8. 啟動 alp.dt 虛擬主機

一個資料夾代表一台電腦 副檔名(.vmdk),虛擬電腦的硬碟檔,就是剛剛選擇的800 GB的硬碟,事實上它就是windows裡面的一個檔案,我們的alpine linux就是存在裡面,不僅如此,我們之後在alpine linux所做的一切linux命令動作,也會通通放在裡面

dk 就是disk的簡寫

副檔名(.vmx),虛擬電腦的設定檔,點他右鍵,用記事本開啟,可以看到設定檔,像是記憶體有多大,cpu幾個核心

  1. 將記憶體大小改成:memsize = “2048”

如果有軟體在使用這台虛擬電腦,他的資料夾裡面會多出.lck檔

開始安裝(setup-alpine)

用root登入,我們用光碟片啟動的系統

透過setup-alpine這個命令,把alpine linux系統裝到硬碟裡面

localhost:~# setup-alpine

第一個是設定鍵盤的排列方式,因為我們台灣的鍵盤是美規,所以這邊打us或是tw都一樣 第二個是地區性的按鍵是什麼規格,在us裡面還有分很多不同的規格,一樣打us

Select keyboard layout [none]: us  
Select variant []: us
 * Caching service dependencies ...
 [ ok ]
 * Setting keymap ...
 [ ok ]

設定電腦名稱: takoyaki

Enter system hostname (short form, e.g. 'foo') [localhost]: takoyaki

設定這台alpine linux虛擬電腦的網路卡名稱,使用內定名稱"eth0"就好,不要修改

Available interfaces are: eth0.
Enter '?' for help on bridges, bonding and vlans.
Which one do you want to initialize? (or '?' or 'done') [eth0] 

有了網路卡,就要有IP位址,這邊透過DHCP Sserver配發IP,VMware workstation扮演Dhcp Server

Ip address for eth0? (or 'dhcp', 'none', '?') [dhcp]

是否要手動設定其他的網路設定: no

Do you want to do any manual network configuration? [no]
udhcpc: started, v1.31.1
udhcpc: sending discover
udhcpc: sending discover
udhcpc: sending select for 10.0.2.15
udhcpc: lease of 10.0.2.15 obtained, lease time 86400

設定root的密碼

Changing password for root
New password: root
passwd: password for root changed by root

設定時區,Asia的A一定要大寫,Taipei的T也要大寫,我們在的時區是亞洲台北

Which timezone are you in? ('?' for list) [UTC] Asia 
What sub-timezone of 'Asia' are you in? ('?' for list) Taipei
 * Starting busybox acpid ...
 [ ok ]
 * Starting busybox crond ...
 [ ok ]

系統詢問我們的工作環境是否有proxy server,回答: none

HTTP/FTP proxy URL? (e.g. 'http://proxy:8080', or 'none') [none] 

NTP : network time protocol,網路時間協定 chrony:他是一套軟體,會跟網路上的時間伺服器做同步 每台電腦時間一定要同步,不然會導致部分軟體無法使用

Which NTP client to run? ('busybox', 'openntpd', 'chrony' or 'none') [chrony] 
 * service chronyd added to runlevel default
 * Caching service dependencies ...
 [ ok ]
 * Starting chronyd ...
 [ ok ]

Available mirrors:
1) dl-cdn.alpinelinux.org
2) uk.alpinelinux.org
3) dl-2.alpinelinux.org
4) dl-4.alpinelinux.org
5) dl-5.alpinelinux.org
6) dl-8.alpinelinux.org
7) mirror.yandex.ru
8) mirrors.gigenet.com
9) mirror1.hs-esslingen.de
.............

r) Add random from the above list
f) Detect and add fastest mirror from above list
e) Edit /etc/apk/repositories with text editor

apk的套件有72個下載點,要選擇第6個下載點,因為他是alpine官網下載的第六個網址,依照老師的經驗,出錯比例低

Enter mirror number (1-72) or URL to add (or r/f/e/done) [1]: 6  
Added mirror dl-8.alpinelinux.org
Updating repository indexes... done.

安裝哪個SSH Server(遠端管理電腦的伺服器)?

Which SSH server? ('openssh', 'dropbear' or 'none') [openssh] 
 * service sshd added to runlevel default
 * Caching service dependencies ...
 [ ok ]
ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519 
 * Starting sshd ...
 [ ok ]

選擇我們當初創造出來的名字叫sda的硬碟

Available disks are:
  sda	(536.9 GB ATA      QEMU HARDDISK   )
Which disk(s) would you like to use? (or '?' for help or 'none') [none] sda
The following disk is selected:
  sda	(536.9 GB ATA      QEMU HARDDISK   )

系統問我們硬碟裡面要裝什麼 因為我們的硬碟要裝整個作業系統,所以打sys

How would you like to use it? ('sys', 'data', 'lvm' or '?' for help) [?] sys 
WARNING: The following disk(s) will be erased:
  sda	(536.9 GB ATA      QEMU HARDDISK   )

是否要清理硬碟的內容: 是

WARNING: Erase the above disk(s) and continue? [y/N]: y
Creating file systems...
Installing system on /dev/sda3:
/mnt/boot is device /dev/sda1
100% ############################################==> initramfs: creating /boot/initramfs-virt
/boot is device /dev/sda1

Installation is complete. Please reboot.

把虛擬機器關機

alp:~# poweroff

再次啟動 VMware Workstation Player

移除 CD/DVD 裝置, (因為我們已經把alpine系統裝到硬碟上,所以可以把光碟刪掉)然後啟動 alp.takoyaki 虛擬主機,

登入 Alpine 虛擬主機

takoyaki login: root
Password: root

安裝nano和sudo兩個指令

$ apk add nano sudo

更改OpenSSH Server的設定檔,允許root可以透過ssh登入

$ nano /etc/ssh/sshd_config 
....
PermitRootLogin yes (原本是prohibit-password,禁止密碼)
....

將虛擬機器重新開機

$ reboot

Alpine 系統環境設定

  1. 在 Windows 命令提示字元 視窗, 登入 alp.takoyaki 虛擬主機

    $ ssh root@192.168.61.xxx
    root@192.168.61.xxx's password: root

    如果出現這個畫面,代表之前有同樣的IP位址被Windows電腦記住憑證,可以用notepad 進去把那個IP刪掉

  2. 系統更新

    # nano /etc/apk/repositories
    ......
    http://mirrors.gigenet.com/alpinelinux/v3.15/main 
    # 官方本身會維護的套件下載點
    http://mirrors.gigenet.com/alpinelinux/v3.15/community (取消這行 備註) 
    # 是到非官方的社群、其他第三方單位維護的套件下載點
    
    ## 以上兩個網址,在一般外面工作都稱為穩定版的套件下載點
    ......
    
    $ apk update; apk upgrade  
    # update : 到上面的兩個網站,下載套件清單 
    # upgrade : 把舊的套件根據前面新的套件清單做比對,把舊的套件升級到最新版

    ———————–以上兩點就是將系統更新

  3. 安裝 應用套件

    $ apk add tree unzip curl wget zip grep bash procps util-linux-misc dialog go udev
  4. 建立與設定 管理者 帳號 (bigred) 建立使用者 : bigred

    $ echo -e "bigred\nbigred" | adduser -s /bin/bash     bigred    
    # /bin/bash 就是我們跟Linux交談的終端機程式

    將bigred加入wheel群組

    $ addgroup bigred wheel
    # wheel 群組只有在alpine linux有,如果要在Ubuntu或其他linux系統,可以自己創一個wheel系統,再把bigred加進去。

修改sudo的授權檔

    $ nano /etc/sudoers 
    ....
    %wheel ALL=(ALL) NOPASSWD: ALL    (取消這行 備註) 
    # 取消註解會讓wheel這個群組裡面的成員在執行sudo時,不用打密碼
    ....
  1. 冷凍 root 帳號

    $ passwd -dl root 
    宣告root的密碼,永遠過期
  2. 關閉 IPv6 (有先軟體預設會先找IPV6溝通,會影響到我們的網路速度)

    $ nano /etc/sysctl.conf
    net.ipv6.conf.all.disable_ipv6 = 1
    
    # ifconfig eth0
    eth0  Link encap:Ethernet  HWaddr 00:0C:29:EE:79:EA
          inet addr:192.168.61.136  Bcast:192.168.61.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:feee:79ea/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:105588 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10794 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:157168681 (149.8 MiB)  TX     bytes:768421 (750.4 KiB)
  3. 重新開機

    $ reboot
  4. 在 Windows 命令提示字元 視窗, 使用 bigred 帳號, 登入 alp.takoyaki 虛擬主機

    $ ssh bigred@192.168.61.xxx
    bigred@192.168.61.xxx's password: bigred

    檢查IPV6有沒有關閉

    $ ifconfig eth0
    eth0  Link encap:Ethernet  HWaddr 00:0C:29:EE:79:EA
          inet addr:192.168.61.136  Bcast:192.168.61.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:104 errors:0 dropped:0 overruns:0 frame:0
          TX packets:99 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:13399 (13.0 KiB)  TX bytes:12816 (12.5 KiB)
  5. 設定 SSH ,產生公私鑰,並複製公鑰成 authorized_keys

    $ ssh-keygen -t rsa -P ''
    # keygen的gen,全名是genarate,所以就是產生兩把鑰匙
    # -t rsa 是用rsa演算法
    Enter file in which to save the key (/home/bigred/.ssh/id_rsa): 按 Enter 
    # 上面這行是問你鑰匙是否存放在/home/bigred/.ssh/目錄下

    檢查

    takoyuki:~$ ls -al .ssh
    total 16
    drwx--S---    2 bigred   bigred        4096 Apr 19 15:36 .
    drwxr-sr-x    3 bigred   bigred        4096 Apr 19 15:36 ..
    -rw-------    1 bigred   bigred        2602 Apr 19 15:36 id_rsa      這是私鑰
    -rw-r--r--    1 bigred   bigred         569 Apr 19 15:36 id_rsa.pub  這是公鑰

    以上的私鑰和公鑰是給bigred使用的

    做ssh設定檔的修改,以後當我們要來=連接對方,對方給我們的公鑰,我們就直接收了,不用打yes

    $ echo 'StrictHostKeyChecking no' | sudo tee -a /etc/ssh/ssh_config  

    這是後面大數據平台要用的

    $ echo 'PermitUserEnvironment yes' | sudo tee -a cat /etc/ssh/sshd_config 
  6. 設定登入 訊息

    $ echo 'Takoyaki 22.04.0' | sudo tee /etc/motd
    # /etc/motd 這個檔案裡面只能放文本,只要我們一登入進去,就會看到的文字說明
  7. 重新開機

    $ sudo reboot
  8. 備份 alp.takoyaki 虛擬主機 壓縮虛擬機器的資料夾


2020/04/20 上課

Encryption

當Host A主機要傳資料給Host B主機時,會先用Host B的公鑰(public key)將明文(plaintext)加密,Host B 收到密文後,用自己的私鑰(private key)解密出明文(plaintext)

SSH

當client端第一次連線到Server端的時候,Server端會問你要不要收公鑰,回答:yes,就會接收到Server的公鑰,如果我們的client端是windows系統,這把公鑰會放在C:\Users\ybean.ssh目錄裡面的Known_host檔案裡面,

192.168.61.140 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOWo9mcmIQL5mFLnZtuNmXtNB0w7UNI7aPIbOvgthFO7f/R2EeLeh/lEOYlo5WEJM2spiQMaf8UZljeyb4QcyTM=
Server的IP位址  演算法               公鑰

章魚燒 系統

[職能考驗項目]

  1. 資料容量大小計算
  2. 網路代號計算
  3. 檔案目錄權限判讀

[系統設計]

  1. 在 Windows 命令提示字元 視窗, 使用 bigred 帳號, 登入 alp.takoyaki 虛擬主機 $ ssh bigred@192.168.61.xxx bigred@192.168.61.xxx’s password: bigred

  2. 檢視 命令 目錄

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

$ which sh
/bin/sh

根據『PATH』這個環境變數所紀錄的路徑,去搜尋『執行檔』的檔名

在alpine linux裡面很多命令真正的執行,都會導向/bin/busybox

  1. 自製 攔截 命令
$ mkdir takoyaki

$ nano takoyaki/sh
#!/bin/sh
echo '5 second to answer question'
read -t 5 -p '57+42/6 = ' ans
[ $? == 1 ] && echo -e "\nbye" && exit 1

$ chmod +x takoyaki/sh

$ ./takoyaki/sh
5 second to answer question
57+42/6 =
bye

$ ./takoyaki/sh
5 second to answer question
57+42/6 = 64

$ sudo cp takoyaki/sh /usr/local/bin/

$ sh
5 second to answer question
57+42/6 =
bye
  1. 修改 攔截 命令
    $ nano takoyaki/sh
    #!/bin/sh
    echo '5 second to answer question'  
    read -t 5 -p '57+42/6 = ' ans                # -t ,給秒數
    [ $? == 1 ] && echo -e "\nbye" && exit 1     
    
    if [ "$ans" == "64" ]; then                  
    sudo rm /usr/local/bin/sh &>/dev/null         # 刪除sh的程式,並且丟到黑洞
    [ "$?" == 1 ] && echo -e "\nerror" && exit 1
    echo "pass"
    fi

$ sudo cp takoyaki/sh /usr/local/bin/

$ sh
5 second to answer question
57+42/6 = 64
pass

$ sh
-bash: /usr/local/bin/sh: No such file or directory
$ exit


練習:
1. 設計 攔截 ping 命令, 問題如下:
   192.168.30.127/26 ,network id is ?

2. 設計 攔截 mkdir 命令, 問題如下:
   rwxr--r-x = ? (number)

--- 

### IP
Class A

0.x.x.x /8 ~ 127.0.0.0 /8 8是subnet mask 這個8也是subnet mask 8的意思是8個bit,也就是1111 1111 = 255 , 完整地表示255.0.0.0 Class A的網段,子網路遮罩一定是8開始,往後數


Class B

128.x.x.x /16 ~ 191.x.x.x /16 Class B的網段,子網路遮罩一定是16開始,往後數

Class c

192.x.x.x /24 ~ 223.x.x.x /24 Class C的網段,子網路遮罩一定是24開始,往後數


行規IP分配(沒有強制性)
120.96.143.128/25 代表Network ID (頭)
120.96.143.129 ~ 120.96.143.138 代表IP Server (前面10個)
120.96.143.250 ~ 120.96.143.254 代表網路設備 (後5個)
120.96.143.255/25 代表廣播位址 (尾)

口訣:去頭去尾前十後五

tags: Alpine