自由軟體系統應用
  • 自由軟體系統應用筆記
  • Ubuntu桌面
    • 使用ubuntu20.04
    • 調整sudoers
    • 使用的 dns resolver
    • 架設DNS Server
    • 區域網路掃描
    • 安裝kazam 錄影截圖
    • 轉檔電腦中的圖片成為其他格式
    • docker nomachine 桌面
    • Youtube Download GUI
    • 影音編輯
    • OCR
    • PDF tools
    • Wii
    • RetroPie
    • 網路工具
      • 伺服器
      • pxe server
      • X11vnc 與 novnc
    • 如何將Ubuntu安裝轉換為滾動版本
  • gitHub
    • Gdevelop
    • git 拉回Repositories
    • gitBook應用
    • 取回 GitBook
    • git web hosting
  • docker 從安裝到應用(入門篇)
    • 環境建構與基礎觀念
    • 虛擬機器與容器之差異
    • 安裝 docker
    • 管理 HOST 機
    • 啟用HOST機的/etc/rc.local
    • 設定HOST的固定IP
    • 映像檔
    • 建立容器
    • 啟動容器
    • 操作映像檔
    • 容器的匯出與匯入
    • docker的終端管理器
    • docker容器系統資源監測終端
    • WebUI : portainer
    • portainer簡易操作(一)
    • portainer簡易操作(二)
    • docker volume
    • docker Node-Red
    • 安裝docker-compose
    • docker dns Server
      • Bind DNS SERVER設定
      • 安裝apache2
    • docker快速建立FTP+SAMBA
    • docker NFS Server
    • docker DHCP Server
    • 下載Youtube
    • 快速架設LAMP環境
    • 安裝xoops
    • docker mosquitto mqtt server
    • nginx proxy
    • nginx load-balancer
    • 快速系統監控系統
    • nagios
    • 快速架設nextcloud私有雲
    • 為私有雲建立raid磁碟
    • 把nextcloud的資料映射到raid
    • 使用docker-compose整合MySQL
    • 建立基礎的Dockerfile
    • 使用Dockerfile建立用於xoops的images
    • 使用docker-compose建立xoops網站
    • x11docker
      • firefox app
    • 上傳你的映像檔docker push
    • 移除docker hub上的images
    • Plex Media
    • transfer.sh從命令行輕鬆共享文件
    • CockPit-docker
    • aria2
    • Grafana
    • Docker的網路
    • Macvlan
    • 使用MacVlan(建議使用)
    • 建立HOST主機橋接網路
    • pipework
    • 手動建立veth pair
    • 程式開發環境-scratch3
    • Scrcpy
    • docker storage drivers
    • x11docker + docker gui 遠端桌面
    • 附錄
    • Bacula
    • Untitled
  • Docker Swarm
    • 開工設置HOST1
    • 將工作節點添加到cluster
    • 使用docker swarm啟動Web服務
    • 對外服務
    • 進階功能
    • 退出cluster
    • 問題與解決
  • k8s
    • 概念
    • 使用Ubuntu單機測試
    • 基本
    • Install 原生 minikube
    • 對外公開應用
    • 更新應用
    • Rollback
    • 使用Rancher OS
  • 儲存與AIoT
    • UserLand
    • Termux
      • 常用快捷鍵
      • 取得當前的shell環境
      • 美化shell介面
      • 取得儲存權限
      • 啟動 SSH Server‌
      • SSH Xforwarding
      • Rsync over SSH
      • 使用putty-tools
      • 安裝基本工具
      • darkhttpd建立簡易網頁檔案服務
      • 安裝youtube-dl 與 you-get 工具下載線上影片
      • 使用Bash-Snippets 的 ytview
      • 播放音樂
      • 開啟影片
      • 檔案管理 Caddy
      • 檔案管理 cloudcmd
      • 安裝Node-Red工具
      • Node-Red存取保護
      • Termux + mosquitto +Node-RED 讓手機更強大
      • node mqtt
      • 把vim變成IDE
      • 使用nvim
      • 在Termux上的Python程式
        • Python MQTT
        • Youtube 下載工具
        • ipython
      • 在Termux上安裝使用golang工具
        • 安裝transfer.sh
      • Grafana
      • 開機啟動
      • 設定mosquitto Server
      • 安裝rclone
      • 安裝nextcloud
      • 終端機外觀
      • 安裝BroadLink套件
      • 使用 node-red BroadLink
      • 使用圖形流程取得手機空間
      • Line notify
      • telegram-cli 通訊
      • 使用Termux-API
      • 掃描區網
      • 安裝Termux-blutooth
      • Actions on Google
      • MongleDB
      • 原生桌面
      • 安裝Linux桌面
        • 中文化
        • 中文輸入
        • Rsync
        • VIM 與 plugins
        • MongoDB
        • SSH -X 登入
      • 寫nodejs小工具
        • 使用express+ejs框架
        • Nodejs MVC設計模式
        • 連接mongodb
        • 純 javascript 資料庫
    • 樹梅派
      • docker
      • 使用遠端linux x11docker 顯示桌面
      • 安裝node-red
      • 整合樹梅派GPIO
      • MQTT Server
      • Cockpit 管理系統
      • Samba服務
      • 藍芽iBeacon
      • Lakka
      • Retroarch
      • RetroPie
      • 樹莓派4B gpio readall 出現Oops - unable to determine board type... model: 17
      • GPIO LED
    • 樹梅派ZeroW
      • 安裝系統
      • 安裝簡易桌面
    • OpenMediaVault 企業用NAS實戰
      • 基本與安全設定
      • 建立安全儲存的磁碟區
      • 內部網路較時服務
      • cockpit系統管理
      • 啟用/etc/rc.local
      • SMART 磁碟健康檢測
      • cpu 溫度
      • 測試災難復原
      • 系統備份
      • 系統損壞災難復原
      • 使用rsync復原系統到新磁碟
      • 運作的系統同步到備用系統
      • 磁碟讀寫測試與速度調整
      • 基本分享 Samba
      • Share NFS
      • Rsync Server
        • 詳解 rsync server
      • 測試NetWork Raid
      • OMV Extra
        • Diskstats
      • 工具 docker
      • 工具 cloudcmd
      • 工具 Heimdall
      • 工具Syncthing
      • 工具 Duplicati
      • firewalld防火牆
      • 循序Rsync
      • 工具 rclone
      • 工具 UrBackup
      • 工具 aaPanel
      • 工具 minio
      • 通知
      • 一些常用磁碟管理指令
      • 附錄:日常維護SOP
      • 真實案例處理
      • 真實處理2
      • 一直收到SparesMissing event
      • Resource問題
      • 附錄:把11顆raid6 reshaped為10顆
      • 附錄:我的powerNAS
      • 附錄:自己架設NAS的理由
      • 系統升級
    • FreeNAS
      • 語言與時間
      • 建立Pool
      • NFS共用
      • SAMBA共用
      • Share iSCSI
    • PomoxVE
      • Untitled
      • 靈活的存儲
      • 整合備份和還原
      • HA 、橋接網路與整合防火牆
      • 登入與修正
      • 增加儲存
      • 下載iso
      • 下載範本
      • 修改虛擬機名稱
      • 建立LXC容器
      • 將lxc容器轉換為範本
      • 從範本複製lxc容器
      • 將容器備份
      • LXC run docker
      • 建立lxc範本(with docker)
      • lxc + docker samba服務測試
      • 建立DNAT
      • 磁碟初始化
      • 建立ZFS pool
        • 建立zpool disk
      • ZFSpool rename
      • 將主機上的目錄綁定給LXC容器
      • 將主機上的目錄綁定給LXC容器中的docker
      • 移除ZFS pool
      • Proxmox VE + OpenMediaVault使用lxc
      • 資料中心儲存(nfs)
      • 儲存(samba)
      • 光纖網路設定
      • 建立叢集
        • 使用Ceph與HA
        • cockpit 管理叢集
        • 以VirtualBox模擬pve叢集
      • Ceph Object Storage
        • Ceph需要大量記憶體
        • OSD的pg_num與CephFS
        • Ceph物件儲存基本
        • 系統備註
        • 如何移除 osd
        • 清理osd 磁碟
        • 列出使用的磁碟與格式化磁碟
        • HEALTH_WARN :too few PGs per OSD (12 < min 30)
      • 安裝VM到ceph,並執行遷移
      • 移除Ceph
      • HA
      • 簡易桌面與音效
      • 無線網路與nat設定
      • 安裝 Windows10 VM
      • 虛擬機實戰應用:建構ceph除存叢集
        • Cockpit管理工具
        • 安裝ceph儲存叢集
      • 附錄
        • 加入 cockpit 管理
        • LVM 檔案系統處理
        • 掛載其他pve的pve-lvm
        • 移除叢集
        • 解決debian10 lxc update後無法重新啟動的問題
        • 刪除內建的 LVM thin:local-lvm,改用ZFS
        • 建立ZFS-RaidZ2的ZFS
        • 使用 cockpit 網路設定 bond
        • iperf 測速
        • 舊文件回顧:lxc的VE應用
        • ceph 指令
        • osd 的 scrub
    • PromoxVE中心企業及伺服器架設實戰
      • 超融合私有雲實施計畫
      • 共享儲存Ceph
      • Ceph核心元件
      • 安裝NetDATA工具
      • 虛擬機無法啟動問題
    • Linux 系統大小事
      • linux已飛入尋常百姓家
      • Linux CLI
        • 美化 Shell
        • 登出與關機
        • Inxi:功能強大的獲取Linux系統信息的命令行工具
        • mv移動與改名
        • 登入:Linux 基本的語法
        • 用 screen 管理多終端
        • rename單次及批次修改檔案名稱
        • 檢查區域網路IP使用:arp-scan
        • 使用者管理
        • 檢視歷史命令
        • 使用管線
        • PV的使用
        • 終端機錄像:asciinema
      • 系統CPU Load Average
      • 系統調整,儘量不使用swap
      • speedtest-cli 測速
      • 磁碟讀寫基本測試
      • 使用NTFS磁區
      • 安裝nodejs環境
        • 全域安裝的node_modules
      • 使用bluetoothctl管理藍芽裝置
      • Snap 安裝軟體
        • Snap Install 安裝軟體
      • 系統時間timedatectl
      • 自動較時chrony
      • 關於mail
      • 檢測WIFI
        • 檢測wifi的有用工具
        • 使用watch+nmcli監看wifi訊號的變化
        • 監控無線網路
        • 檢查wifi使用802.11xx
        • 找出你的psk密碼
      • 快速修改主機名稱
      • Shell Script
        • Bash Script參考:有用BASH腳本的集合
        • Bash Script參考:bench.sh
        • 自己寫吧!Hello,Bash:echo
        • Hello,Bash:printf
        • "Debug" mode
        • 變數和環境變數
        • 用戶輸入
        • 註釋多行
        • for 迴圈 1~100
        • 數位時鐘(while迴圈)
        • 取得本機的IP與連線網際網路的IP(NAT)
        • 找出你的DHCP Server
        • 使用curl測試連接某網站的速度
        • host + whois找出某網站的資訊
        • 簡易網站
        • RSYNC SERVER
      • 安裝vifm
      • Nmap應用
      • Fail2ban
      • 讓Cron的工作不寄信
      • use ZFS
      • 掛載其他系統的ZFS磁碟
      • 不能ping的主機,使用 arping
      • transfer.sh從命令行輕鬆共享文件
      • console 應用
      • SYN_RECV的奇怪連線
      • 可以測試的 v4 與 v6
    • Mozilla WebThings Gateway
      • Add-ons
      • Untitled
    • Ansible
    • 使用FlatPack安裝Retroarch
    • 網路大小事
      • 系統優化
      • 系統安全:iptables與 ip6tables
        • 攻擊測試工具
        • iptables
        • 實驗環境
        • iptable與NAT路由器
      • 系統監控
      • Arp攻擊
    • MongoDB Community
      • on Ubuntu 安裝與移除
      • on Debian 安裝與移除
      • on Debian 基本使用
      • 自訂資料庫與port
    • 監控工具之:Grafana
    • CoreOS
      • Untitled
      • 安裝到硬碟
      • 遠端登入
  • 線上工具
    • Google for Education 學習永不止息
    • Google ClassRoom + Meet
    • mqtt server
      • mqtt.one
      • test.mosquitto.org
      • iot.eclipse.org
    • Jitsi Meet Server
    • Jitsi Meet用docker裝很簡單
    • 動畫製作
    • 關於作者
  • windows
    • Windows Terminal
    • windows WSL2
      • 安裝桌面
      • 中文化
      • wsl2 docker
    • Windows BAT
    • Windows Git
    • Windows 的命令式套件管理工具:WinGet
    • 取得wifi密碼
    • Node-Red
  • 運算思維
    • Python Install on Windows
      • IPython
      • VS code
        • Untitled
        • Jupyter
      • Simple Use
      • Python Path
      • Start 程式
      • 流程控制:假如
      • 工具:簡易網站
      • 工具:rename
Powered by GitBook
On this page
  • 建立第一個被隔離的「容器」,ubuntu的LXC虛擬機
  • 測試中文環境
  • 安裝phpmyadmin
  • 設定DNS:
  • 建議的快照建立方法:
  • 如何自動開機啟動VE
  • 進階設定與管理

Was this helpful?

  1. 儲存與AIoT
  2. PomoxVE
  3. 附錄

舊文件回顧:lxc的VE應用

Previousiperf 測速Nextceph 指令

Last updated 5 years ago

Was this helpful?

自由軟體:LXC->新世代的輕量級虛擬化技術

2013/07/23

卓國興

Linux conatiners (LXC)是在Linux平台上基於容器的虛擬化技術的未來標準

LXC自2.6.29的核心時,便已進入其中,顯見linux系統對此容器虛擬系統的重視,其管理工具也持續更新中

Container沒有VM(Virtual Machine)這個概念,取而代之的是VE(Virtual Environment)或稱VPS(Virtual Private Server)。而進到VE/VPS裡面,就是一個現成的操作系統環境。 簡單的說,LXC對外而言,就像一台虛擬機,但對於 HOST 機器而言,他就只是一個在執行中的應用程式 更多說明,請參閱

認識Linux Container( Linux 容器系統)

在雲端運算的領域,虛擬系統扮演著核心的角色,但不管虛擬系統效能如何的提升,像是使用硬體輔助虛擬化的加強,虛擬機(Guest OS)對實體機(Host OS)來說,仍是沈重的負擔。

虛 擬系統由早期完全透過軟體來模擬硬體裝置的全虛擬化(Full virtualization),演進到以修改系統(Guest OS)核心的方式,來簡化 CPU 與週邊裝置操作指令轉譯的複雜度, 以提升虛擬系統的效能的半虛擬化(Paravirtualization),一直到目前 Linux 核心支援的原生虛擬化技術(Linux Kernel-base virtual machime,簡稱 Linux KVM),可以明顯的發現,虛擬系統在發展的過程中,嘗試利用各種方式來減輕軟體虛擬化的程度, 而後期因為硬體(CPU)技術與規格的提升,讓 CPU 直接支援虛擬化技術,加上 Linux 核心直接內建虛擬化的核心,並透過 Hypervisor 的管理程序,讓虛擬化技術以裸機架構(Bare-Metal)的模式來運作,而也由於 CPU 與系統核心皆支援虛擬化技術,讓虛擬系統的核心命令可以直接通透到實體電腦的 CPU,以模組化的方式來執行核心指令,以提升運作效能。

然 而,話雖如此,即使如 Linux KVM 利用支援虛擬化技術的實體 CPU 與系統核心,強化了CPU 指令運算的效能,但大部分的周邊裝置,像是網路卡、顯示卡等,卻還是要倚賴軟體來(例如 QEMU)將其虛擬化之後使用,在實際的應用面上,也會明顯拖累整體系統的效能,尤其是網路卡更是明顯,所有的虛擬網路卡都是以同一張實體網路卡來當做對 外聯繫的窗口(如果所有的虛擬網路卡都有對外連線的需求時),這勢必會影響原先實體系統的網路運作,只要虛擬電腦的數量越多,影響的程度就越大。

說到這裡,我們就不能對虛擬電腦的效能,有更高的期許嗎?一定要有硬體輔助虛擬化的硬體設備,才可以建構高效能的虛擬機嗎?LXC可能就是你要的答案

Linux Container,這是一套不需要透過虛擬化平台(Hypervisor)來模擬所有的硬體裝置,而是直接可以使用實體主機硬體裝置的虛擬系統架構,讓虛擬化的電腦有最大的效能與最小的耗損。

LXC其本身僅提供最低程度虛擬化(硬體)的功能,僅須兩個系統管理工具(cgroup 與 App Armor), 來管理、控制,並隔離虛擬電腦與實體電腦的資源運用。

Linux Container 就是可以直接使用實體電腦上的軟硬體資源,最特別的,就是 Linux Container 與實體系統共享相同的核心與函式庫。(你可以於lxc的虛擬電腦上,執行 uname -r,你會發現,核心與你的HOST機相同)

LXC 與實體系統共享相同的核心與函式庫,簡單來說, LXC 只能安裝 Linux 相關的作業系統,在 LXC 的世界中,Windows 系統是無法使用的啦!

不過,雖說LXC無法安裝windows虛擬機,可是,你還是可以使用KVM或VirtualBox來安裝使用,因為,這兩種虛擬系統(LXC & KVM or LXC & VirtualBox)可以並存,同時執行。

建立 Linux Container( Linux 容器系統)

下載工具包:

安裝lxc

sudo apt-get install lxc

在ubuntu系統上安裝lxc環境就是這麼簡單,接下來就只要把容器裝好並執行就可以了,對於HOST機而言,就像執行一支程式那樣。

安裝容器前,先找一下範本吧

dpkg -L lxc

------------------------------------------------

/usr/lib/lxc/templates

/usr/lib/lxc/templates/lxc-debian

/usr/lib/lxc/templates/lxc-ubuntu-cloud/usr/lib/lxc/templates/lxc-busybox

/usr/lib/lxc/templates/lxc-fedora

/usr/lib/lxc/templates/lxc-sshd

/usr/lib/lxc/templates/lxc-opensuse

/usr/lib/lxc/templates/lxc-ubuntu

-----------------------------------------------------

這些是ubuntu安裝完lxc的預設容器範本,支援ubuntu(廢話),debian,fedora與opensuse,甚至,就一支ssh的server(有獨立IP的SSH Server)

當然,另外一個作為Server使用上相當受歡迎的CentOS雖不在其中,但一樣可以安裝,筆者測試過,CentOS6.4 Final一樣可以正常運作,筆者將於之後提供。

下載工具包:

建立第一個被隔離的「容器」,ubuntu的LXC虛擬機

$ sudo lxc-create -t ubuntu -n firstlxcubuntu

不用懷疑,就這麼簡單

這行指令的意義,就是以ubuntu為範本,建立名為firstlxcubuntu的虛擬機

你會發現,所有的套件,透過網路來下載並安裝,時間的長短,則取決於網路的速度

安裝完的虛擬機,就只是一個名為firtslxcubuntu的目錄,預設位置為/var/lib/lxc

安裝好後,啟動他吧

sudo lxc-start -n firstlxcubuntu

這樣,一個LXC虛擬機就啟動了,記憶體卻用不到20MB

另外,執行ifocnfig,可以看到有配到一個private ip,並且還可以連上網際網路

使用 LXC 虛擬機,操作上完全跟使用實體電腦一模一樣,系統整體的反應速度,幾乎跟實體電腦一模一樣。

lxc的預設橋接介面:lxcbr0

當你安裝了LXC的執行環境,就會自動幫你建立好lxcbr0的橋接介面,預設ip為10.0.3.1,作為gateway,配發10.0.3.x的ip給所有的虛擬機,如下圖,啟動的虛擬機正以vethxxxx的介面橋接到lxcbr0,也就能以NAT的模式連上網際網路

LXC虛擬機的執行狀態:開啟另一個終端機,執行以下指令

sudo lxc-list

LXC 內作業系統的檔案結構:

sudo apt-get install tree

tree -L 2 /var/lib/lxc/firstlxcubuntu/

/var/lib/lxc/firstlxcubuntu/

├── config

├── fstab

├── rootfs

│ ├── bin

│ ├── boot

│ ├── dev

│ ├── etc

│ ├── home

│ ├── lib

│ ├── lib64

│ ├── media

│ ├── mnt

│ ├── opt

│ ├── proc

│ ├── root

│ ├── run

│ ├── sbin

│ ├── selinux

│ ├── srv

│ ├── sys

│ ├── tmp

│ ├── usr

│ └── var

└── rootfs.hold

21 directories, 3 files

可以發現,其結構與一個安裝好的Linux系統的目錄結構相同

config 為此虛擬電腦的設定檔案,而整個系統的主要檔案結構(目錄),則是在 rootfs 的目錄內

關閉運行中的LXC虛擬機:

在剛剛lxc-start啟動的終端畫面,執行 sudo poweroff

在HOST機中的任何終端機中,執行 sudo lxc-stop -n firstlxcubuntu

sudo lxc-list

可以發現,firstlxcubuntu已經是STOPPED

複製與刪除 LXC 虛擬機

sudo lxc-clone -o firstlxcubuntu -n sourcelxcubuntu

Enter之後,就會開始備份

為了資料的完整性與一致性,以lxc-clone進行系統複製的時候,最好還是先將 LXC 來源虛擬機關機之後,再利用指令進行複製,會比較好!

sudo lxc-list

RUNNING

firstlxcubuntu

FROZEN

STOPPED

sourcelxcubuntu

sudo lxc-stop -n firstlxcubuntu

摧毀LXC虛擬機:

sudo lxc-destroy -n firstrlxcubuntu

刪除之後,就可以發現/var/lib/lxc的firstlxcubuntu目錄,已經被我們刪除了。

lxc-console的使用:

以背景方式執行:

lxc-start -d -n sourcelxcubuntu

lxc-console -n sourcelxcubuntu

Crtl+a q(離開)

基本中文環境與建議套件

lxc-start -n sourcelxcubuntu

進入console畫面,mkdir 中文,顯示為....

這表示不支援中文顯示,所以,要建立中文環境

sudo apt-get update

sudo apt-get install language-pack-zh-hant language-pack-en tasksel ttf-droid vim nano

sudo vi /etc/environment

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" LANGUAGE=zh_TW.UTF-8 LANG=zh_TW.UTF-8 LC_ALL=zh_TW.UTF-8

sudo vi /etc/init/fales.conf

測試中文環境

sudo poweroff 或於HOST中,執行 lxc-stop -n sourcelxcubuntu

sudo lxc-start -n sourcelxcubuntu

重建「中文」目錄

如此,中文輸入與顯示都正常了,也比較方便管理

安裝DNS與LAMP服務:

sudo tasksel

安裝phpmyadmin

sudo apt-get install phpmyadmin

sudo apt-get clean

測試:

ifconfig

netstat -ltn

在HOST機,以瀏覽器輸入ifconfig看到的ip,以便測試web與phpmayadmin

建立自己的虛擬switch,橋接到學校的網段,並設定固定IPv4與IPv6:

之前安裝好的DNS與WEB服務,雖然可以正常啟用,但IP不是固定的,另外,沒有IPv6,使用的IP也非學校的publicIP,不適合作為對外服務使用,所以,我們需要建立橋接介面,並與學校的對外網段一致

使用工具:建立Host的橋接介面.sh

此工具使用 brctl 工具,需要安裝「bridge-utils」這個橋接套件,之前我們執行brctl show,所看到lxcbr0,一樣是由此套件建置,只不過,現在由我們手動建置,並橋接到學校對外的網段上。

修改此shell檔的設定值:

#請依學校的實際網路參數,設定以下的設定值(IPv6可以填貴校的正確位址,在測試的NAT環境下出不去)

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

#橋接介面

BRIFACE="br0"

#實體介面

ethcard1="eth0"

#ip

ipv4=192.168.1.5

#netmask

v4mask=255.255.255.0

#network

v4network=192.168.1.0

#broadcast

v4brc=192.168.1.255

#gateway

v4gw=192.168.1.1

#使用一個固定ipv6(此作為HOST機,不可為::1)

ipv6="2001:db8:abcd::10"

#prefix

v6mask=64

#ipv6 gateway

v6gw="2001:db8:abcd::fffe"

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

設定值設好後,執行此shell程式即可

sudo chmod 700 建立Host的橋接介面.sh

sudo su

./建立Host的橋接介面.sh

未避免dhclient 或 dhclient3的程序殘留,造成伺服器取得DHCP,應該:

killall dhclient

killall dhclient3

ping gateway

ping 168.95.1.1

ping tw.yahoo.com

若都連通,那麼HOST的br0對外連線就沒問題

開機自動啟用br0

sudo su

cd /etc/init

vi failsafe.conf

改成下面設定:

-------------------------------------

…............................

sleep 2

# Plymouth errors should not stop the script because we *must* reach

# the end of this script to avoid letting the system spin forever

# waiting on it to start.

$PLYMOUTH message --text="Waiting for network configuration..." || :

#sleep 40

$PLYMOUTH message --text="Waiting up to 60 more seconds for network configuration..." || :

#sleep 59

…....................................

…..................

--------------------------------------

vi /etc/rc.local

--------------------------------------------

/opt/tools/建立Host的橋接介面.sh

exit 0

--------------------------------------------

好了,接下來就是要設定LXC VE的config設定,把lxcbr0改成br0

vi /var/lib/lxc/sourcelxcubuntu/config

-------------------------------------------------------------------------------------

lxc.network.type=veth

lxc.network.link=lxcbr0

=>

lxc.network.type=veth

lxc.network.link=br0

------------------------------------------------------------------------------------

回到HOST機:

lxc-stop -n sourcelxcubuntu

lxc-start -n sourcelxcubuntu

ifconfig

-------------------------------------------------------------------------------------

eth0 Link encap:Ethernet HWaddr 00:16:3e:c7:3d:e4

inet addr:192.168.1.3 Bcast:192.168.1.255 Mask:255.255.255.0

-------------------------------------------------------------------------------------

開啟另一個終端機

-------------------------------------------------------------------------------------

brctl show

bridge name bridge id STP enabled interfaces

br0 8000.5ac778cea566 no eth0

veth4dFAVw

lxcbr0 8000.000000000000 no

------------------------------------------------------------------------------------

由以上的狀況,可以得知隨機的vethXXXX,已經橋接到br0

不過,你的VE基本上得到是DHCP的IP,若要對外服務,還是要設定固定IPv4與IPv6

透過config設定檔來設定

-----------------------------------------------------

#設定VE的虛擬網路介面名稱

lxc.network.name = eth0

#設定VE與HOST橋接所用的網路介面

lxc.network.veth.pair = lxcVE1

#以下請根據學校的網路分配狀況,寫入正確的ip/netmask 163.26.xxx.x/24 or 23,但最好自行寫入VE的/etc/network/interfaces是比較穩當的作法 #lxc.network.ipv4 = 192.168.1.6/24

#lxc.network.ipv6 = 200:db8:abcd::6/64 ------------------------------------------------------------------------------------------

lxc.network.ipv4.gateway specify the ipv4 address to use as the gateway inside the container. The address is in format x.y.z.t, eg. 192.168.1.123. Can also have the special value auto, which means to take the primary address from the bridge interface (as specified by the lxc.network.link option) and use that as the gateway. auto is only available when using the veth and macvlan network types.

以上為manpage的說明

原則上,使用veth的方式,可以自動取的HOST的gateway,但最好自行寫入VE的/etc/network/interfaces是比較穩當的作法

lxc.network.veth.pair = lxcVE1 可以指定用於橋接的網卡名稱

直接設定VE的虛擬網路卡,就如同使用實體的ubuntu系統一樣

使用工具:設定VE網路.sh

cp 設定VE網路.sh /var/lib/lxc/sourcelxcubuntu/rootfs/opt/

進入VE的console畫面,然後執行:

sudo su

vi /opt/設定VE網路.sh

---------------------------------------

根據說明修改設定值

---------------------------------------

執行:

/opt/設定VE網路.sh

好了,現在已經完成固定IP,請重新啟動VE,這樣,才能讓apache2跑在IPv6上

安全議題:

由於有安裝phpmyadmin不限制其使用範圍,將會收到許多網際網路上的暴力破解攻擊,所以,請設定apache2,限制連線IP

vi /etc/apache2/conf.d/ra-phpmyadmin

------------------------------------------------------------

<Location /phpmyadmin>

order deny,allow

deny from all

# 可連線區

allow from 127.0.0.1 ::1 192.168.1.0/24

Options FollowSymLinks MultiViews

</Location>

-------------------------------------------------------------

修改apache2的設定:

vi /etc/apache2/sites-available/default 與 default-ssl

----------------------------------------------------------------------------------

<Directory /var/www/>

Options Indexes FollowSymLinks MultiViews

AllowOverride None

Order allow,deny

allow from all

</Directory>

<Directory /var/www/>

Options FollowSymLinks MultiViews

AllowOverride All

Order allow,deny

allow from all

</Directory>

-----------------------------------------------------------------------------------

service apache2 restart

測試:

由於IPv6並沒有列於allow的範圍(最好也不要,因為範圍太大),自然就無法連線,而被拒絕

設定DNS:

使用工具:endns.sh

cp endns.sh /var/lib/lxc/sourcelxcubuntu/rootfs/opt/

進入LXC的VE console畫面:

注意:此處請使用 lxc-console -n sourcelxcubuntu,方能正確使用dialog工具

執行:

sudo apt-get install dialog dnsutils

sudo su

/opt/endns.sh

以dig指令查詢

dig @2001:db8:abcd::6 www.kawsing.tn.edu.tw

如果沒有錯誤,那你的DNS就可以以IPv4與IPv6來查詢了,那麼基本的DNS + Web服務已經啟動完成,然後,就可以正式安裝其他的服務

安裝xoops並作為範本目錄

由此下載最新版本,宏凱有持續維護,請安心服用

把該壓縮檔放到/var/www底下,unzip 該壓縮檔

sudo apt-get install unzip

sudo mkdir /var/www/xoops

sudo mv /var/www/xoops2.x.x/htdocs/* /var/www/xoops/

cd /var/www/xoops/

sudo chown -R www-data.www-data uploads/ templates_c/ cache/ xoops_data/

sudo chmod 666 mainfile.php include/license.php

開始安裝:

安裝完成後,須注意的地方:

chmod 444 /var/www/xoops/mainfile.php

rm -rf /var/www/xoops/install

mv /var/www/xoops/xoops_lib /var/xoopsdata/

mv /var/www/xoops/xoops_data/ /var/xoopsdata/

上傳檔案大小的限制,預設是2M,請修改,以便上傳大於此size的影音檔,改完後,請記得重新啟動apache2

修改/etc/php5/apache2/php.ini此檔案中的

max_execution_time = 300

upload_max_filesize = 50M

service apache2 restart

這樣,基本上一個DNS+lamp+xoops站台的基礎VE已經完成,可以以這個VE為基礎,就可以很快建立其他對外服務的VE,你可以使用lxc-clone , rsync,但最快的的建立方式,就是使用快照,在Linux系統中,最著名的就是lvm,但其設置較麻煩,此處將介紹使用Btrfs

parted /dev/sdc --script print

parted --script /dev/sdc mkpart logical btrfs startGB endGB

parted /dev/sdc rm number

Btrfs(B-tree 檔案系統, 通常念成 Butter FS,Better FS 或 B-tree FS),採用GPL授權

目標是取代目前ext檔案系統,改善ext檔案系統的限制,對單個文件的大小,總文件系統大小或文件檢查和加入ext不支援的功能,可做快照(writable snapshots)、甚至快照的快照(snapshots of snapshots)、磁碟陣列(RAID),以及子卷(subvolumes)(做快照前須建立的)。Btrfs 也宣稱會專注在「容錯、修復及易於管理」,是備受期待的新世代檔案系統

為何使用Btrfs檔案系統?

一般說來,目前主流的虛擬機虛擬系統,都支援對虛擬機做快照,而LXC雖有一個lxc-checkpoint的指令,但目前看來尚未實作,所以藉由Btrfs的快照功能,就能補足這點

btrfs檔案系統、快照建立與複製系統

建立btrfs分割區

sudo apt-get install btrfs-tools

1.使用gparted

2.工具shell使用

parted磁碟工具.sh

bash parted磁碟工具.sh sdx 10

建立好Btrfs檔案系統後,把他掛載起來,就可以作為放置一個VE的空間

若沒有空間可以分割,也可以使用虛擬磁碟模式,並格式化成Btrfs

kvm-img create -f raw lxcBOX.img 10G

losetup -f lxcBOX.img

losetup -a

losetup -a

-----------------------------------------------------------------------------------------

/dev/loop0: [0821]:494848 (/cdrom/casper/filesystem.squashfs)

/dev/loop1: [0023]:635194 (/media/usbVEdisk0/lxcsh/上課用工具包/lxcBOX.img)

-----------------------------------------------------------------------------------------

mkfs.btrfs lxcBOX.img

WARNING! - Btrfs Btrfs v0.19 IS EXPERIMENTAL

WARNING! - see http://btrfs.wiki.kernel.org before using

fs created label (null) on lxcBOX.img

nodesize 4096 leafsize 4096 sectorsize 4096 size 10.00GB

Btrfs Btrfs v0.19

你也可以使用dd if=/dev/zero of=lxcBOX.img bs=1M count=10000來建立,但速度較慢

lxc-stop -n sourcelxcubuntu

mv sourcelxcubuntu /root/

mkdir /var/lib/lxc/kawsingVE

mount /root/lxcBOX.img /var/lib/lxc/kawsingVE

cd /var/lib/lxc/kawsingVE

btrfs subvolume create kawsingVE

rsync -azvP /root/sourcelxcubuntu/* /var/lib/lxc/kawsingVE/kawsingVE

mv /var/lib/lxc/kawsingVE/kawsingVE/config ..

vi config

----------------------------------------------------------------

#修改虛擬網卡的MAC

lxc.network.hwaddr = 00:16:3e:c7:3d:e5

lxc.utsname = kawwsingVE

…...................................

…..........................

#指定根目錄所在

lxc.rootfs = /var/lib/lxc/kawsingVE/kawsingVE/rootfs

#mount的設定位置

lxc.mount = /var/lib/lxc/kawsingVE/kawsingVE/fstab

----------------------------------------------------------------

lxc-list

lxc-start -d -n kawsingVE

lxc-list

----------------------

RUNNING

kawsingVE

---------------------

不過此時主機名稱仍為sourcelxcubuntu,須修改

sudo vi /etc/hostname

---------------------------------

kawsingVE

----------------------------------

sudo vi /etc/hosts

---------------------------------

127.0.0.1 localhost kawsingVE

---------------------------------

sudo reboot

測試快照功能

cd /var/lib/lxc/kawsingVE

btrfs subvolume snap kawsingVE kawsingVE-shot

你可以發現,快照可以立即建立,並獨立使用

比較:

tree -L 2 kawsingVE kawsingVE-shot

kawsingVE

├── fstab

├── rootfs

│ ├── bin

│ ├── boot

│ ├── dev

│ ├── etc

│ ├── home

│ ├── lib

│ ├── lib64

│ ├── media

│ ├── mnt

│ ├── opt

│ ├── proc

│ ├── root

│ ├── run

│ ├── sbin

│ ├── selinux

│ ├── srv

│ ├── sys

│ ├── tmp

│ ├── usr

│ └── var

└── rootfs.hold

kawsingVE-shot

├── fstab

└── rootfs

├── bin

├── boot

├── dev

├── etc

├── home

├── lib

├── lib64

├── media

├── mnt

├── opt

├── proc

├── root

├── run

├── sbin

├── selinux

├── srv

├── sys

├── tmp

├── usr

└── var

兩個目錄的內容當下都是相同,當然,若服務中的目錄之後有變動,也不會影響到快照的內容。

所以:

  1. 快照可以作為備份的來源 由於快照為當下內容的一個完整鏡像,所以所有檔案是靜止的狀態,最適合作為rsync的備份來源,完全不會有資料不一致的狀況產生 我們可以把每五分鐘所做的最新快照,透過ssh+rsync的方法,備份到遠端HOST主機 這個部份,當我們完成第3項工作後,再來進行,因為需要以VirtuaBox或KVM的virt-manager來模擬第2台HOST

建議的快照建立方法:

實際運用上,我麼應把一個乾淨的VE,作為source,並且,不對外運作,之後,有需要建立新的VE,再以此VE做快照,才不會產生不必要的資料

sudo lxc-stop -n kawsingVE

sudo btrfs subvolume snap kawsingVE kawsingVEsite1

cp config config4site1 mkdir /var/lib/lxc/kawsingVEsite1

cd /var/lib/lxc/kawsingVEsite1

ln -s ../kawsingVE/kawsingVEsite1/config4site1 config ln -s ../kawsingVE/kawsingVEsite1/

之後,保留快照份數.sh要改成快照這兩台VE

FROZEN是什麼:

基本上,就是暫停的意思

sudo lxc-freeze -n kawsingVEsite2

sudo lxc-list

解除暫停:

sudo lxc-unfreeze -n kawsingVEsite2

一次建立多台主機快照的工具:保留快照份數new2.sh

修改設定:

---------------------------------------------------------

#要快照的主機,以空白隔開

SnapSource="/var/lib/lxc/kawsingVE/kawsingVEsite1 /var/lib/lxc/kawsingVE/kawsingVEsite2"

#保留的份數,6表示各3個快照

keep=6

----------------------------------------------------------

重要:需要避開apparmor的限制,所以

cd /var/lib/lxc/lxc-ubuntu

sudo vi config

--------------------------------------------

lxc.aa_profile = unconfined

--------------------------------------------

如何自動開機啟動VE

原本的方法:

cd /etc/lxc/auto

ln -s /var/lib/lxc/kawsingVEsite1/config kawsingVEsite1

ln -s /var/lib/lxc/kawsingVEsite2/config kawsingVEsite2

這是原本的方式,但由於我們需先掛載btrfs分割區(此處以lxcBOX.img模擬),所以,我麼改寫在/etc/rc.local當中

方法:

  • mount btrfs分割區位置 /var/lib/lxc/kasingVE

  • 執行loop.sh進行定時快照

  • lxc-start -d -n kawsingVEsite1

  • lxc-start -d -n kawsingVEsite2

最後,你的/etc/rc.local應該是這樣: --------------------------------------------- /opt/tools/建立Host的橋接介面.sh mount /root/lxcBOX.img /var/lib/lxc/kawsingVE sleep 1 /var/lib/lxc/kawsingVE/loop.sh & lxc-start -d -n kawsingVEsite1

sleep 1

lxc-start -d -n kawsingVEsite2 ---------------------------------------------

以VirtualBox模擬第2台HOST

HOST機的建構:

系統安裝模式:Live Persistent

何謂Live Persistent模式:

LiveCD 系統,相信大家都知道,光碟開機即可載入一個作業系統,但操作的過程,儲存的檔案,都會再重新開機後消失(因為都存於RAM中),而為了保留之前儲存的資 料,從knoppix時代,就有所謂「永久家目錄」,讓你可以把存在家目錄的檔案,於重新開機後叫回,隨著LIVE技術的進步,目前已經可以透過核心技 術,加上特定的開機參數,把整個/目錄的變動都保留下來,並於下次開機時叫回,就像真實安裝的系統一樣

執行效能與速度:若你使用usb隨身碟安裝,那麼, 執行效能與速度,將與隨身碟的讀取、寫入速度有關,若選擇系統硬碟,則與安裝於系統的表現相去不遠

安裝於硬碟、隨身碟,方法一樣。

使用工具:miniserver_livesystem.sh

使用VirtualBox來安裝模擬用的HOST

VirtualBox的開機前設定如下:

進入系統後,執行

sudo gparted

建立兩個分割,第二個分割必須取名為casper-rw

建立如下的分割

下載筆者的shell,放到/opt/tools/

如下圖執行:

製作完成,重新開機,畫面如下

是否使用了casper-rw的空間做永久儲存空間,執行df -h,看看 / 的容量即可

如同HOST1的設定一樣,把同名的LXC空間建立起來

開機時,自動掛載該空間

sudo vi /etc/rc.local

備份的subvolume已經建立好了,接著,就是把主要的HOST的VE資料rsync到相同subvolume

建立模擬第2片網卡,使用「僅限主機」,並作為rsync同步資料的介面

建立第2虛擬網卡,作為備份的獨立頻寬

啟動ssh

sudo service ssh start

第一次同步

/var/lib/lxc/kawsingVEsite1

/var/lib/lxc/kawsingVEsite2

/var/lib/kawsingVE/kawsingVE/*

/var/lib/kawsingVE/kawsingVEsite1/*

/var/lib/kawsingVE/kawsingVEsite2/*

之後以cron同步,由HOST2主動要求

/var/lib/kawsingVE/kawsingVEsite1最新的shot

/var/lib/kawsingVE/kawsingVEsite2最新的shot

即可

建立兩台HOST機的ssh 信任關係,以無密碼方式SSH連線,就能將備份流程寫在cron之中,自動備份

於HOST1主機以root身份執行:

sudo su

mkdir /root/.ssh

service ssh start

於HOST2主機以root身份執行:

ssh-keygen

scp authorized_keys root@192.168.56.1:/root/.ssh/

rm -f authorized_keys

測試:

ssh -l root 192.168.56.1

看看是否不需密碼即可登入

執行備份最新的快照:

若最新的一份快照有新增的資料,就會備份過來

從HOST2的主機主動對HOST1的lxcVE系統備份:

到HOST2

cd /root

vi 我的自動備份.sh

---------------------------------------------------------

#!/bin/bash

rsync -azvP root@192.168.56.1:/var/lib/lxc/kawsingVE/newkawsingVEsite1/ /var/lib/lxc/kawsingVE/kawsingVEsite1/

rsync -azvP root@192.168.56.1:/var/lib/lxc/kawsingVE/newkawsingVEsite2/ /var/lib/lxc/kawsingVE/kawsingVEsite2/

---------------------------------------------------------

crontab -e

6/* * * * * /root/我的自動備份.sh

這樣,就能定時備份HOST1的最新快照

lxc.network.name = eth0(lxc看到的)

HOST機的eth0不見,因為被VE佔去

進入VE主機,其eth0的MAC與HOST的eth0相同

ubuntu系統不自動產生/etc/udev/rules.d/70-persistent-net.rules的方法

cd /lib/udev/rules.d/

mv 75-persistent-net-generator.rules /root

進階設定與管理

-------------------------------------------

lxc.cgroup.cpuset.cpus = 0 lxc.cgroup.cpu.shares = 1024 lxc.cgroup.memory.limit_in_bytes = 512M lxc.cgroup.memory.memsw.limit_in_bytes = 768M

--------------------------------------------

cpu ram 與 cgroup控制群組

可用於檢視: lxc-cgroup -n xxx cpuset.cpus

lxc-cgroup -n xxx cpu.shares

lxc-cgroup -n xxx memory.limit_in_bytes

可以動態調整

lxc-cgroup -n xxx cpuset.cpus 1

lxc-cgroup -n xxx cupser.cpus 1,3 or 3,1等

會發現使用不同的cpu去運作,或多核運作

lxc-cgroup -n xxx cpu.shares 512

lxc-cgroup -n xxx memory.limit_in_bytes 256M

我希望已最簡易的網路架構,容易瞭解與維護的軟體工具、完全自由、開放,

完整可自訂的結構完成這些功能,不要為了某些用到機會很少,又容易出錯的所謂強大功能而讓軟體與結構複雜,畢竟,以長遠看來,「容易與可快速回復」比較實際(我的個人想法)

dig @192.168.1.6

特別注意,移出網站主目錄的 xoops_lib 與 xoops_data 的位置,要寫到mainfile.php中

快照可以作為還原系統的基準點 還原測試: lxc-start -d -n kawsingVE 登入xoops站台,修改佈景主題等資料 sudo lxc-console -n kawsingVE 安裝 iftop 套件 sudo apt-get install iftop 以上,我們安裝了套件,修改了xoops,然後,我們測試還原到之前的快照 還原方法: sudo lxc-stop -n kawsingVE cd /var/lib/lxc/kawsingVE mv kawsingVE kawsingVEbak mv kawsingVE-shot kawsingVE 重新啟動還原的VE sudo lxc-start -d -n kawsingVE 測試xoops站台,佈景回到修改之前的狀態 sudo lxc-console -n kawsingVE 檢查iftop,顯示為未安裝的狀態 這樣,就回復到未修改的狀態,夠快夠簡單吧 若每五分鐘快照一次,一天備份30份,超過的舊目錄自動刪除,就可以保留150分鐘的還原點 使用工具:保留快照份數.sh 此處以保留3份為例,當超過3份,就移除舊的快照

快照可以作為新服務的虛擬機 用btrfs做出的快照,每個都是可以獨立讀寫的目錄,所以,可以馬上成為一個新的VE主機,設定其他IP與服務 從kawsingVE建立kawsingVEsite2快照 sudo btrfs snap kawsingVE kawsingVEsite2 cd kawsingVEsite2/rootfs/etc/network/ vi interfaces 修改xoops站台的mainfile.php cd /var/lib/lxc/kawsingVE/kawsingVEsite2/rootfs/var/www/xoops vi mainfile.php cp config config4site2 vi config4site2 虛修改虛擬MAC,主機名稱,IPv4,IPv6,橋接的虛擬網卡,根目錄與fstab位置,如下圖所示 到/var/lib/lxc的VE主機目錄,建立kawsingVEsite2的空目錄,並建立連結 cd /var/lib/lxc mkdir kawsingVEsite2 ln -s ../kawsingVE/kasingVEsite2/config4sie2 config ln -s ../kawsingVE/kawsingVEsite2/ sudo lxc-list 現在,啟動兩台VE,並ping看看 lxc-start -d -n kawsingVE lxc-start -d -n kawsingVEsite2 lxc-list RUNNING kawsingVE kawsingVEsite2 測試xoops: 以瀏覽器開啟 http://192.168.1.7/xoops,並修改看板的IP 好了,一個新的xoops站台已經完成 停用kawsingVEsite2的DNS,修改/etc/hostname /etc/hosts,完成完整VE主機設定 sudo lxc-console -n kawsingVEsite2 進入VE主機console畫面 sudo service bind9 stop sudo apt-get install rcconf sudo rcconf sudo vi /etc/hostname ---------------------------------------- kawsingVEsite2 ---------------------------------------- sudo vi /etc/hosts ----------------------------------------- 127.0.0.1localhost kasingVEsite2 ----------------------------------------- sudo reboot (題外話:你可以發現,重新啟動一個VE是五秒內可以完成的事,這是虛擬化成VM比不上的) sudo lxc-list sudo lxc-console -n kawsingVEsite2 好,新主機完成,收工!

不需要修改資料,這是原本要對外服務的主機 然後,啟動kawsingVEsite1與kawsingVEsite2,不要啟動kawsingVE,把他當作之後的Source,如下圖

停機,建立新的虛擬硬碟,作為btrfs的專用磁區

在VirtualBox下執行的LXC需要使用獨立網卡 lxc.network.type=phys lxc.network.link=eth0 (要佔用的HOST實體網卡) lxc.network.flags=up lxc.network.hwaddr = 08:00:27:53:1c:65 (HOST的eth0的MAC)

www.kawsing.tn.edu.tw
http://www.tad0616.net/modules/tad_uploader/index.php?of_cat_sn=62
http://lxc.sourceforge.net/