# 舊文件回顧：lxc的VE應用

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

**2013/07/23**

**卓國興**<br>

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

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

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

**認識Linux Container（ Linux 容器系統）**

![](https://lh6.googleusercontent.com/Q--i2QY7GK7D6sCkOiLUIJ9zzIjiMOY5u-VNxZ7h5eWDiqZldQhLZCjv3fpe2ee0ELOCvsrEWzws_7J471iXxeyuV1OeguF0aTSdWrFw5Kqm6uc0glt0Gf332n7TI8OgBByxbQ)

**在雲端運算的領域，虛擬系統扮演著核心的角色，但不管虛擬系統效能如何的提升，像是使用硬體輔助虛擬化的加強，虛擬機（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）， 來管理、控制，並隔離虛擬電腦與實體電腦的資源運用。**&#x20;

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

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

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

**建立 Linux Container（ Linux 容器系統）**<br>

**下載工具包：**

**安裝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一樣可以正常運作，筆者將於之後提供。**\
\
\
\
\
\
\
\
\
\
\ <br>

**下載工具包：**

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

**$ sudo lxc-create -t ubuntu -n firstlxcubuntu**

**不用懷疑，就這麼簡單**

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

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

![](https://lh4.googleusercontent.com/jiWc16N7jq6l4mcFAwrFxx5tWWnGHcOmNSduOfGURFoHHauA6G0mXmkbUWpxF3JPODj3PSDKf1LG9pQCyDBC1UqrMOsHQ6nCekSyxtbfkTu8oT5L0KtNXwueQsBf6KNeOQOibA)

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

**安裝好後，啟動他吧**

**sudo lxc-start -n firstlxcubuntu**

![](https://lh6.googleusercontent.com/Od4XK9e5aXZ8JdmD9ulAiPrmpIWfxR3N9uHn91afuoC4q3kBWHWHCShUuTQLODlV_Z8W_4IAf3HPteUFcwwCckjj-BSQMKru4ezwmOXM50kRVNDPApR4SfUHYi-XsD4sBLDtIA)

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

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

![](https://lh4.googleusercontent.com/mnJfrREOJvFXcM20k7jrba5znHgqIz6Z7RFUibimMdL6CmqiLSQeqLQCVLAfo8ppv2A5cvyzpCKN_vH0cpUiqkSmSB6MPnW1fCNIs791OmESEQ4_99KNo1exA_XYZE_0XzKvrw)

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

**lxc的預設橋接介面：lxcbr0**

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

![](https://lh5.googleusercontent.com/bnBmcFXgB7DLxl5Gk7EM1yd_SzQ9HnoHRvwl6oksNSniuMXXV37LBzaY3-JZZ8xpnDdHtZz45UMlnpCh_X2Fue5ZHTOoNkIZaU6-ewpbmvbTazsCOG3Itv8L5yiL8HvI6PXzMw)

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

**sudo lxc-list**

![](https://lh3.googleusercontent.com/3SGn317xsDjQ9nZ2ol59xcijGYNz4BdeGzgVOYMEsvfcmVZMIlD0PdBytUU3rxkNnKQ5WmIeA8trGjtv3hHLH8pCIfkfv_dWDHuBfmtpmwyaYe2xGN8JFHwB3N6w2jI7lmaiQQ)

**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**<br>

**21 directories, 3 files**<br>

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

**config 為此虛擬電腦的設定檔案，而整個系統的主要檔案結構（目錄），則是在 rootfs 的目錄內**<br>

**關閉運行中的LXC虛擬機：**

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

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

**sudo lxc-list**

**可以發現，firstlxcubuntu已經是STOPPED**<br>

**複製與刪除 LXC 虛擬機**

**sudo lxc-clone -o firstlxcubuntu -n sourcelxcubuntu**

**Enter之後，就會開始備份**

![](https://lh5.googleusercontent.com/Ilhutl4nG18MKL8Vndm1g5qqWsTZOIywO67nQBPpn-mB0sJR6HdeuSTy5fw35ZzFNcqmDSGsakLBfhdgtvivXcrvA6UYRaEXHSZ2M96gJPHjKuxUD9evHbdvPHZLbTenDRFKWw)

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

**sudo lxc-list**

**RUNNING**

&#x20; **firstlxcubuntu**<br>

**FROZEN**<br>

**STOPPED**

&#x20; **sourcelxcubuntu**\ <br>

**sudo lxc-stop -n firstlxcubuntu**<br>

**摧毀LXC虛擬機：**

**sudo lxc-destroy -n firstrlxcubuntu**

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

**lxc-console的使用：**

**以背景方式執行：**

**lxc-start -d -n sourcelxcubuntu**

**lxc-console -n sourcelxcubuntu**

**Crtl+a q(離開)**\
\ <br>

**基本中文環境與建議套件**

**lxc-start -n sourcelxcubuntu**

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

![](https://lh6.googleusercontent.com/pkFzBL1CujKFUr-NRx5I2X-AeHRbjOwxUvC53XROF8oD9-kdxJMppvDxuysLDDP1NynGp9D6S58Ysd4XEPp07uw5cC9U5v7oowUSMFNL5oAfzSmPu4S-2cTWai4dJAA4dmQcGA)

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

**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**<br>

**sudo vi /etc/init/fales.conf**\ <br>

### **測試中文環境**

**sudo poweroff 或於HOST中，執行 lxc-stop -n sourcelxcubuntu**<br>

**sudo lxc-start -n sourcelxcubuntu**

**重建「中文」目錄**

![](https://lh4.googleusercontent.com/WKV0XsHgolRM884MYCicOm34gzAXZ_vTbFpkIID1KxTSqINi4krKO5QEgwe4HhHF5Y-R39qaqnJI23mW4rzRiKUa3rplKhZwNWCqZlmT21mxTH7N7DZR6lDGB9Ejz3fqGNT5rg)

**如此，中文輸入與顯示都正常了，也比較方便管理**<br>

**安裝DNS與LAMP服務：**&#x20;

**sudo tasksel**

![](https://lh6.googleusercontent.com/SdgCitJNkK-CYkMnOTIVMsHMuz8CteVfWP7Yl-Iae69JBbkz4stwRSLaV2ZttljgV2qJDpVIaTMVqMpb5MmyvRPPdjEAD4gd-6wdwinAubjmdUywNnHVIv4p4mj6bKEyp2C1fg)

![](https://lh6.googleusercontent.com/5vkI1HCSzqbr2vNawcB6Pcboin26UUM75bZjRAP_irpO1hOPKMQlgwRWyer9jL2ui0WJTBcyG5HwaCfyrr57RSC6rr8UUNM10-AMTED_PTO_eBPPVvUQkx3w__SyX9l04WxKmQ)

![](https://lh5.googleusercontent.com/uzbhKTI1JvOB5fiMnWso0Z7VYLKQF_l-Wl5Xt5ULugD5jQl7m_1_8xIfe6x_pgqlGDOW3mYYGfxQx8OZKbxNgqNrrqDSk5e_xxQHMC_v7THbYtMYNbGZFidOvMU58kwSWRHtsw)

![](https://lh4.googleusercontent.com/zi9bs3dmgjQVgfYS_ZJqrSYATDBXxO70mmBjEweH9aGa77NdZI738p78ej67EAhMWE_L6N_PIce5_bpqQ1EGKr-mHIrnPvzYFIyD2quKWWODhL15wc4w5YigX85KGS1E3uqwsg)

### **安裝phpmyadmin**

**sudo apt-get install phpmyadmin**

![](https://lh6.googleusercontent.com/kITzvMaMtI5tx_p-vT4leY_jUFPZ0Uaf7QLVtVdsgV3JypHy0R_TqobqwrdncuDhsH1y6KvVbV4EIsYOtHZxC5oL81u-TnneGieZRiT7dd1jeuiNjDCNIgUCV8nQ1hN2XwNnBg)

![](https://lh5.googleusercontent.com/OeZlWyuNXgC-SQScTIA6JEPuYFFEFmTJ-uuGsuReBS6vAyuXWS0PfbH-bOidUv6a2R0y2bmJKgxtp2J-bjHaz3SvAUrZOMI1sMHdBByKh-JZQz0sQ7l3F7sAzI8jrRGEsjeZVg)

![](https://lh3.googleusercontent.com/g5NM4oOPjbzAtMwEsSeNwFg0vuNw4QSfjJnDQmgmsuHxseF3r3XhTDhsARRRZkNH7EOEPXCryVwDxSWGmr99lU84S9lrj6aWSdggfZe_zy6itx6MKMh46P7y5ifFpm3wtOPsqA)

![](https://lh4.googleusercontent.com/eIg8ZGe0GC5uLYThtMr65aaCFtcEfveV9Y_GQhuJfwSgDTVf8VICzT0dqYljNnzg6IaXr83tuNGfkujh_imqdI-ggqnjQoA9lAssaxmBvILjAgutTjpcFybEO8fatLQyH0Cx_Q)

![](https://lh4.googleusercontent.com/QHeperg4NJ9YYyipWQ7UfmrAzoISnv-tXdF7QcOHoALX_q3CFvN6CB01uPVvjWkq1D09ALcxqaBWPH3YjquQASzf8ILR7Zk9tCnrvbs14jSUQmP-agGuBL5G8JusafM9FkERjQ)

**sudo apt-get clean**<br>

**測試：**

**ifconfig**

**netstat -ltn**

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

![](https://lh6.googleusercontent.com/93Rr1ASwwkrbSKI4MkAjBzC5DcRvsh08AVCaqH4iDOzuTmOjtO7ThllXIXw1CFaQ61OIcRY3JIyNgWRRtnd35XBVdc9as2MBxZStT6N-ukzh2MkRojmZ3NVA64DK77w7etjeKw)

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

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

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

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

**修改此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**<br>

![](https://lh3.googleusercontent.com/4UTmHshcoHKUi-JlOjGhXWMR2PZVU31wqBvdKKoDuzDeEtEzforqBVsNX41gRmOj7U3zjdZ_J5Gd7gUxjsreQcQz-sYdbHj_bKsTwsbAPc87pa8A7vbAPErfHRuasGv2riL2-Q)

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

**killall dhclient**

**killall dhclient3**<br>

**ping gateway**

**ping 168.95.1.1**

**ping tw\.yahoo.com**

**若都連通，那麼HOST的br0對外連線就沒問題**<br>

**開機自動啟用br0**

**sudo su**

**cd /etc/init**

**vi failsafe.conf**

**改成下面設定：**

**-------------------------------------**

**…............................**

&#x20; **sleep 2**

&#x20;**# Plymouth errors should not stop the script because we \*must\* reach**

&#x20;**# the end of this script to avoid letting the system spin forever**

&#x20;**# waiting on it to start.**

&#x20;    **$PLYMOUTH message --text="Waiting for network configuration..." || :**

&#x20;    **#sleep 40**<br>

&#x20;    **$PLYMOUTH message --text="Waiting up to 60 more seconds for network configuration..." || :**

&#x20;    **#sleep 59**

**…....................................**

**…..................**

**--------------------------------------**<br>

**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**

**------------------------------------------------------------------------------------**\ <br>

**回到HOST機：**

**lxc-stop -n sourcelxcubuntu**

**lxc-start -n sourcelxcubuntu**

**ifconfig**

**-------------------------------------------------------------------------------------**

**eth0  Link encap:Ethernet  HWaddr 00:16:3e:c7:3d:e4** &#x20;

&#x20;      **inet addr:192.168.1.3  Bcast:192.168.1.255 Mask:255.255.255.0**

**-------------------------------------------------------------------------------------**\
\
\
\
\
\ <br>

**開啟另一個終端機**

**-------------------------------------------------------------------------------------**

**brctl show**

**bridge name    bridge id STP enabled    interfaces**

**br0   8000.5ac778cea566    no eth0**

&#x20;   **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**\
&#x20;             **specify the ipv4  address to use as  the gateway inside the**\
&#x20;             **container. The address is in format x.y.z.t, eg.  192.168.1.123.**\
&#x20;             **Can also have  the special value auto, which means to take the**\
&#x20;             **primary address from the bridge interface (as specified  by the**\
&#x20;             **lxc.network.link  option)  and use that as the gateway. auto is**\
&#x20;             **only available when using the veth and macvlan network types.**

**以上為manpage的說明**

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

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

![](https://lh3.googleusercontent.com/ic5Vx6fXvWSw9EmZqPE_s_RYLrVrMuG_PuPZKRR8ZCSflJBaFlrX_bMaw7pxweeEf_0da0o2sT_8EQ2gThYXPYIjoDBeB6mxn2mllTkdimtJvPwGXNJkfWRkJt0qhs0Z8P8YNA)

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

**使用工具：設定VE網路.sh**

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

**進入VE的console畫面，然後執行：**

**sudo su**

**vi /opt/設定VE網路.sh**

**---------------------------------------**

**根據說明修改設定值**

**---------------------------------------**

**執行：**

**/opt/設定VE網路.sh**

![](https://lh5.googleusercontent.com/6KzGsKjBMXLWvXJGBOmSuf5msZwpd9MRSnJkNGdBaPB9nudkz4yrBjQzd-2cCXwdy4iSmFP9ZHAnX_8h5A-JKRvfiFJQi6QqXOh6ItJ1TOvD3GMIl3HO71GDSzDgIYM2cH1ywQ)

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

![](https://lh5.googleusercontent.com/h-WPOhICdo-53GNcmXFBWXrn3koGsykhtGZ_U9wk6NXhN4_ccjlinrDbioKpOa2s3zBcZaqm-T8cby7XSDYfrysz9jPNVvIwb-yqQgPH132s1G_UXjS51IgZYv7sg7Um5PEHog)

**安全議題：**

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

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

**------------------------------------------------------------**

**\<Location /phpmyadmin>**

&#x20; **order deny,allow**

&#x20; **deny from all**

&#x20; **# 可連線區**

&#x20; **allow from 127.0.0.1 ::1 192.168.1.0/24**

&#x20; **Options FollowSymLinks MultiViews**

**\</Location>**

**-------------------------------------------------------------**<br>

**修改apache2的設定：**

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

**----------------------------------------------------------------------------------**

**\<Directory /var/www/>**

&#x20;            **Options Indexes FollowSymLinks MultiViews**

&#x20;            **AllowOverride None**

&#x20;            **Order allow,deny**

&#x20;            **allow from all**

&#x20;**\</Directory>**

**\<Directory /var/www/>**

&#x20;            **Options FollowSymLinks MultiViews**

&#x20;            **AllowOverride All**

&#x20;            **Order allow,deny**

&#x20;            **allow from all**

&#x20;  **\</Directory>**

**-----------------------------------------------------------------------------------**

**service apache2 restart**<br>

**測試：**

![](https://lh5.googleusercontent.com/PCvbl4eSPdSc_X8BvpG0N7r3DkFgTHqt7mcUy1iwQl5l0KogQwzYvjnAJQwfUnV7dEZCK2K5lct7W1ym8OfbCuHa6GOzt67Z7XN4o02Jpqtf4wSYeDjWcqAHEQ4JM2gnQh5YxQ)

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

![](https://lh6.googleusercontent.com/EzeFC5TeqZf6lTnb9qw4hrZv7tRmoyLWpT-BvPbv7YV2G7Rn9KKT-LsNq4CNVFrBMeHZKyD-WWcBqvEHcUVKlsiYVHKfRttCZ8xc3SnlcJNQsbOEw-86LHM8bIkeoDER7fj1FA)

### **設定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**\ <br>

![](https://lh4.googleusercontent.com/LHhRxyPh5HQ1z3XNq3dj0UoZLGDaBS-prP6Mrw-Mpezabl1IZOzhAfVKEp8RMbwS_AfHJVILsccg8Mz7sb8USWVNYKDZ7mV9oHUCk95wr3-rjqAy1IGOsqbyOatSxku7dHL0ig)![](https://lh4.googleusercontent.com/92TB7yINt-GCyvzv8I0049S7vyvyB2tD6PS8BH8NBiImriiX7Q84wlJI3FR8JgM4JFLwvZJIBbPsyoRXCqImDKWs3GYFE9JhNXtZxZl2mabFRw8DRMyZrO276uqEQGVi1kWGRw)<br>

![](https://lh5.googleusercontent.com/mwswaaTgU-2yDggmN97oB9LN18pZbJMTzj5ourJUDkM81tfiiPCpdoQfgHpsT5xQbISX9bGnIfF1E27av25R1t9iBYUQIDQHbAv0BIFQovvC86wdCUH1aqEFTzkb_-pB-dUSHg)![](https://lh6.googleusercontent.com/5BDZd_fcD3tgqgOK6lMF7sRl2BvnB-R2wwzalhqlT8YQrrzptv2GRbVc4DIpwBarCB_f0n6WWnF0pqv1ZqQBYLduJy2y78UIIs5zzgJtnXcvTou0OzJE_tjhApGLmWxMyxMYvA)

![](https://lh3.googleusercontent.com/AA6glrfljDHcjgFUvwxpDoInGkO4UoKUQcMVSBNmSecCN_7cUfxDCHccoHcAtw0MAY31XZViSkN2kNrxtQuI9oToZgEAKFPWyCsnzuEalEQjZyJ-hO1fI2fri47_AgEBLn8FWA)

**以dig指令查詢**

**dig @192.168.1.6** [**www.kawsing.tn.edu.tw**](http://www.kawsing.tn.edu.tw)

\*\*dig @2001:db8:abcd::6 [www.kawsing.tn.edu.tw\*\*\\](http://www.kawsing.tn.edu.tw**\\) <br>

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

**安裝xoops並作為範本目錄**

[**http://www.tad0616.net/modules/tad\_uploader/index.php?of\_cat\_sn=62**](http://www.tad0616.net/modules/tad_uploader/index.php?of_cat_sn=62)<br>

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

**把該壓縮檔放到/var/www底下，unzip 該壓縮檔**\ <br>

**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**

**開始安裝：**\ <br>

**安裝完成後，須注意的地方：**

![](https://lh4.googleusercontent.com/FiMiHqqomFmEUzZxOsLvrAf29EFap-ojkkJBfxjjV_m2WqheOb0gUmLSubtW9XZ533K7PjheacKuC__-a02AMwv2aDLc5I44OuuGT8h7DiYYnRdwataZYrbWwZdu4mlSTsa1kg)

**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/**<br>

**特別注意，移出網站主目錄的 xoops\_lib 與 xoops\_data 的位置，要寫到mainfile.php中**![](https://lh6.googleusercontent.com/VwD0LfoZAVw1AHeWSP2jLxXLaIGTecjYT916D6j6_lOefrbkYdutJ8tu0WZ65N3axrSja-rQvqHCEOXxQJpwlFztmfRKDXe0Il6Qh12V4Pfu3EE4uSw0Ov5S0nd0Y63Uw-D-fw)\
\
\
\ <br>

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

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

**max\_execution\_time = 300**

**upload\_max\_filesize = 50M**<br>

**service apache2 restart**<br>

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

**parted /dev/sdc --script print**

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

**parted /dev/sdc rm number**\ <br>

**Btrfs（B-tree 檔案系統, 通常念成 Butter FS,Better FS 或 B-tree FS），採用GPL授權**

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

**為何使用Btrfs檔案系統？**

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

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

**建立btrfs分割區**

**sudo apt-get install btrfs-tools**

**1.使用gparted**

![](https://lh5.googleusercontent.com/ZwjVE919LzKJGSNVeh06bB2PWtvWMjJcJjBd7w284ePRo__6xVpBwWWvZpRnY_MXDFldDGH71HBppIcHGM_V654CtRrsJKV8MnAG5dgWrgrve2aSVm9xlR4woEQqrvjnhfcGAw)

**2.工具shell使用**

**parted磁碟工具.sh**

**bash parted磁碟工具.sh sdx 10**

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

**若沒有空間可以分割，也可以使用虛擬磁碟模式，並格式化成Btrfs**\ <br>

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

**losetup -f lxcBOX.img**

**losetup -a**

&#x20;**losetup -a**

**-----------------------------------------------------------------------------------------**

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

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

**-----------------------------------------------------------------------------------------**

**mkfs.btrfs lxcBOX.img**<br>

**WARNING! - Btrfs Btrfs v0.19 IS EXPERIMENTAL**

**WARNING! - see <http://btrfs.wiki.kernel.org> before using**<br>

**fs created label (null) on lxcBOX.img**

&#x20;   **nodesize 4096 leafsize 4096 sectorsize 4096 size 10.00GB**

**Btrfs Btrfs v0.19**\ <br>

**你也可以使用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**

&#x20; **kawsingVE**

**---------------------**<br>

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

**sudo vi /etc/hostname**

**---------------------------------**

**kawsingVE**

**----------------------------------**

**sudo vi /etc/hosts**

**---------------------------------**

**127.0.0.1   localhost kawsingVE**

**---------------------------------**

**sudo reboot**<br>

**測試快照功能**

**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**

&#x20;**├── bin**

&#x20;**├── boot**

&#x20;**├── dev**

&#x20;**├── etc**

&#x20;**├── home**

&#x20;**├── lib**

&#x20;**├── lib64**

&#x20;**├── media**

&#x20;**├── mnt**

&#x20;**├── opt**

&#x20;**├── proc**

&#x20;**├── root**

&#x20;**├── run**

&#x20;**├── sbin**

&#x20;**├── selinux**

&#x20;**├── srv**

&#x20;**├── sys**

&#x20;**├── tmp**

&#x20;**├── usr**

&#x20;**└── var**<br>

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

**所以：**

**快照可以作為還原系統的基準點**\
**還原測試：**\
**lxc-start -d -n kawsingVE**\
**登入xoops站台，修改佈景主題等資料**\
![](https://lh6.googleusercontent.com/t_FLWiLvdHA9Gh7EZ_6KCkyGuqUi7Bg90voo4JO8UJERmakdFnBdiU8y1N9VV7rK8r0RKvvSKCxhDIhVdNUosykFADXyLq8NODchibnKYKYcXHIn9e8aHHQ5sPQ9-C1SPakOBQ)\
\
\
**sudo lxc-console -n kawsingVE**\
**安裝 iftop 套件**\
**sudo apt-get install iftop**\
![](https://lh4.googleusercontent.com/nV24H8Z1MIWlp0WUJzQFNvT9jJ2VOMxFDroSi_oRclT405mCABPR24MKAHB54Olv0hLy7fpNyQ-OPQF0gfOAaMtREgJ1XN_8upBnCd45wpXswS7MTyCGS_FsneeDDMWz1gnd6wQ)\
**以上，我們安裝了套件，修改了xoops，然後，我們測試還原到之前的快照**\
**還原方法：**\
**sudo lxc-stop -n kawsingVE**\
**cd /var/lib/lxc/kawsingVE**\
**mv kawsingVE kawsingVEbak**\
**mv kawsingVE-shot kawsingVE**\
![](https://lh4.googleusercontent.com/JpEauNd7eq2km6Xp18biOBLVAfFVGDWRyqQBOlTQZ-0sX8XBl0RK1A1va37zzREo3RRoXkcSmvBuSIK59WDka30IHgn3zUXWgPOjoMwkoqvxtdO87wT34odSmQ2vKwXjCzQqqQ)\
**重新啟動還原的VE**\
**sudo lxc-start -d -n kawsingVE**\
**測試xoops站台，佈景回到修改之前的狀態**\
![](https://lh4.googleusercontent.com/a22l9AygHDGOPSMuRdVRBe_3WoY2eKBzYmR4Ne_WtH56iZbCCwu5D9w7d8h0tgDDwUpgD-1TTS0sCq53RQFpLX59wpvQ9o4dXDNnma54kEWujzPtsTdWejbiNZxc_K1anhQDCg)\
**sudo lxc-console -n kawsingVE**\
**檢查iftop，顯示為未安裝的狀態**\
![](https://lh4.googleusercontent.com/4sRjskMBND3m77YgxT6HznfdTtVu95ri4wkTZ8AiEuWFDqvQvYAVfyvQ5ZOSDP2AGifecJheAMLuvgjnHTxcsGejhuBpGHhxRxIzmNrotFUT4TwJ5jQjniEiOFhmlPqay3wrGQ)\
**這樣，就回復到未修改的狀態，夠快夠簡單吧**\
\
\
**若每五分鐘快照一次，一天備份30份，超過的舊目錄自動刪除，就可以保留150分鐘的還原點**\
\
**使用工具：保留快照份數.sh**\
**此處以保留3份為例，當超過3份，就移除舊的快照**\
![](https://lh5.googleusercontent.com/UWsuPp-8mzN8Fbz5aeeQWFOCnz9HwGbc1oHfZGaFqi1bPeqKBw8Ms3uTWbCeyaVCC0UHLvxWIA_L6laFgV0li4Z09LKgMG4-RI5B0bn0kdl8e511YlTbCHUWIZviScLbvy45vw)\
\ <br>

1. **快照可以作為備份的來源**\
   **由於快照為當下內容的一個完整鏡像，所以所有檔案是靜止的狀態，最適合作為rsync的備份來源，完全不會有資料不一致的狀況產生**\
   **我們可以把每五分鐘所做的最新快照，透過ssh+rsync的方法，備份到遠端HOST主機**\
   \
   **這個部份，當我們完成第3項工作後，再來進行，因為需要以VirtuaBox或KVM的virt-manager來模擬第2台HOST**
2. **快照可以作為新服務的虛擬機**\
   **用btrfs做出的快照，每個都是可以獨立讀寫的目錄，所以，可以馬上成為一個新的VE主機，設定其他IP與服務**\
   **從kawsingVE建立kawsingVEsite2快照**\
   **sudo btrfs snap kawsingVE kawsingVEsite2**\
   ![](https://lh4.googleusercontent.com/lPnabEdYwteZrTVyCD-nmWdk_u8RaZ9XIjfLCuJKga1s7EUFfnUGIk3k_jiKUUwx_iFPHbs3I19NwgixJG-E7osJA6uzhAwXlyTcNue-dRmw8_7KqJpNSQtA9S6sflYrzJqHkQ)\
   **cd kawsingVEsite2/rootfs/etc/network/**\
   **vi interfaces**\
   ![](https://lh5.googleusercontent.com/IdQ5KvRARVnI-rBjR1Wlv3NX4gSMf2p8Q2Vuz1IoEd9MaY9a_NRWm9JeS_fNA8auj4yPgzJazAYV4-R5ZUIurlUm4H4Coy4iL-oZOmKuaqQAIEG6Cz5CtC8esq_sy0Mi6SidpA)\
   **修改xoops站台的mainfile.php**\
   **cd /var/lib/lxc/kawsingVE/kawsingVEsite2/rootfs/var/www/xoops**\
   **vi mainfile.php**\
   ![](https://lh6.googleusercontent.com/KgGm3_auWuXfX3qyZ8SLmqKMqkIayY9FPFvwtFM5MoBegA_v_ZfhCM3eleqqkAg4-eWNfffy8SCtqSlYs1emJxN4OSBdYbstbj7OufgOOY7vjB4jCm3vuvQb5XIK0nHwF0xuOQ)\
   \
   **cp config config4site2**\
   **vi config4site2**\
   **虛修改虛擬MAC，主機名稱，IPv4，IPv6，橋接的虛擬網卡，根目錄與fstab位置，如下圖所示**\
   ![](https://lh4.googleusercontent.com/VNuGDryZI0Xf3968sAnu3fNlc4jkoVpkoX28YfQ4zb2NC39ENBTt28Jun6_FBUyp4etNm3WTwihhmMIB-Ru6kO78wj1LvanG2F-UOYEH1V61Jd5i1e50k9N5-Ep3m5mNreZ7aw)\
   **到/var/lib/lxc的VE主機目錄，建立kawsingVEsite2的空目錄，並建立連結**\
   **cd /var/lib/lxc**\
   **mkdir kawsingVEsite2**\
   **ln -s ../kawsingVE/kasingVEsite2/config4sie2 config**\
   **ln -s ../kawsingVE/kawsingVEsite2/**\
   ![](https://lh4.googleusercontent.com/E-urtvjtdZyNkFjYdtfJub4owcYsw6vshL_jNKLPxw3V_Xk8_Tn-qGk-At2JBalF9Ub3_A9CxynmwAoAO-A92T3r9n0fTK6Ogr2GswEmnX_u7XfDrNjfofEibXIHFjE6ggnYUA)\
   **sudo lxc-list**\
   ![](https://lh6.googleusercontent.com/uSkBwQSo9T1k8TTooGqmJBGsf_J-tER0kgXu0UjCTaNmo3c98LrOglu5Bz0ijx0WtTkwMg0d5mISItQ3Xz-lx3o3xBZDF9sEywRyAgcUMI0luiCUbwvm4kIk_qnAkLdfyr3ojQ)\
   **現在，啟動兩台VE，並ping看看**\
   **lxc-start -d -n kawsingVE**\
   **lxc-start -d -n kawsingVEsite2**\
   **lxc-list**\
   **RUNNING**\
   &#x20; **kawsingVE**\
   &#x20; **kawsingVEsite2**\
   ![](https://lh6.googleusercontent.com/MWqva1bpHQ4DjfRmk1mKepenAIj8MPKW6uQTHeQv1yxGfJOICUW7hR9LFxMxPanmpZj9lorsEukFzxDJ-GpNO_RLzXHJsWhxqDw9_nILe3vtZDi_2TJUtDN730eHUmQftoMtqQ)\
   **測試xoops：**\
   \*\*以瀏覽器開啟 <http://192.168.1.7/xoops，並修改看板的IP**\\>
   ![](https://lh5.googleusercontent.com/WpO4LmnCqQVOTNSsltGpjvPBfZ5Bt8nLT6w7M_OISQpaX-Ut5eO9_gv8eLDYbXQs09pmOJTGT6z_WZ83Y8yPd_E-BAckvopBZPevklZ8m5rKCy67CigUR1s__aWNg_1hxa6Z9w)\
   ![](https://lh3.googleusercontent.com/-Gx_jcy7tuJ6zORE7BVhOF0es6MUDBj-YIqT7vhJrDJsrUWO23wfmBGBAmiA7wXbyQOwjeYHyZMLU3iSIEzsGBNwMnsCt_Zx10MPa9RKVepaFltd0EYcapeLf6WOFjIMpIzelQ)\
   **好了，一個新的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**\
   ![](https://lh3.googleusercontent.com/boBbZ-OKu2OPkYVscsyJDEUSNl3YdzXXNqjrEJx5be2fCL60_UjHlC1YjFVzV9Nzz19yABMAwy5xzi1Ka-zgcke3GvbFAacnswNsb9l7hSpboBxf9CzVX5kNa4h3ZANSb1Dx_A)\
   **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**\
   ![](https://lh5.googleusercontent.com/jJ0SRmu7t03UJc_DhcM7TvdIS61fIhvtDXBaAyGfS-ooAoKCIGT7QqpwH5ZMAsIyPDoQC3wuj8UMN-cLBxvAc44BR0_j7y7dUtmE_lW05YSMco6rVcVb_UU_p93W7h1x5jpptg)\
   **好，新主機完成，收工！**

### **建議的快照建立方法：**

**實際運用上，我麼應把一個乾淨的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/**

**不需要修改資料，這是原本要對外服務的主機**\
**然後，啟動kawsingVEsite1與kawsingVEsite2，不要啟動kawsingVE，把他當作之後的Source，如下圖**\
![](https://lh5.googleusercontent.com/IqsPeX2p3XaS3Z3CYx0ommHy4Wn4kSb2kZvPiwHLL1c-Q43vE1joJvvhvN-xZsYNCjEfsN4Pw8xTPPWwZPoUoQBB1LLABya48gkxB5Vlg8dz5vFIjk7Wvm-7heSj_jhYPTND6g)

![](https://lh5.googleusercontent.com/EZ5STn-mfXo7u1B6eV35oKHQT0M-3fYcEyZpvACankQdhx-PyDlsF1fHwNJuWxDLDKMezVtN_RaVYzWZemqH8TJgZZ1gXdU9InMjGvr3FGFoUYVdJYN5l-6rkDuUQyXdwVl_hg)

![](https://lh4.googleusercontent.com/SA1APCsUX1Yglx3wZpkzXFcNkngnWy5KGnGu5oGCnX6gYG5hEPDnotFrM8kUIVw7RQZ70Xdag2HvD3e9YpPjkosL2bAGfw_LWi88V7yJH_IDtxIGK38olR5D8Sr7e6d8mpiZVw)

**之後，保留快照份數.sh要改成快照這兩台VE**<br>

**FROZEN是什麼：**

**基本上，就是暫停的意思**

**sudo lxc-freeze -n kawsingVEsite2**

**sudo lxc-list**

**解除暫停：**

**sudo lxc-unfreeze -n kawsingVEsite2**

![](https://lh4.googleusercontent.com/-oEuapdQrw1xbYdfTWN3oFZx8ugX4tGau5wWnVmqt1RcPAkqKZhqATlQG_1qSmxbwL3JGlv1lPlv3EPrTygNkHIfPF2S719eUT5hK41LD9C2lEIeK0hZF8c-OMx6rMs5WgQEFA)

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

**修改設定：**

**---------------------------------------------------------**

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

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

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

**keep=6**

**----------------------------------------------------------**\ <br>

**重要：需要避開apparmor的限制，所以**

**cd /var/lib/lxc/lxc-ubuntu**

**sudo vi config**

**--------------------------------------------**

**lxc.aa\_profile = unconfined**

**--------------------------------------------**<br>

### **如何自動開機啟動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**\
**---------------------------------------------**\
\ <br>

**以VirtualBox模擬第2台HOST**

**HOST機的建構：**

**系統安裝模式：Live Persistent**

**何謂Live Persistent模式：**

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

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

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

**使用工具：miniserver\_livesystem.sh**\
\
\
\
\
\
\
\
\
\
\
\ <br>

**使用VirtualBox來安裝模擬用的HOST**

**VirtualBox的開機前設定如下：**

![](https://lh6.googleusercontent.com/ZSIdYwUOnc7dZ1dWo5IvYjRhsHj02VP_Opajmi6-2YHFYqvrP2-YK36eaShe8VnLR8bj2OXJAMPhN-uGgqYwJag0cotCH5wVOEJoiJMdhbnX3xSb2CuN8HqZVDcHfEPG1dz_TQ)

**進入系統後，執行**

**sudo gparted**

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

![](https://lh3.googleusercontent.com/r9a5U2-q9pf8b8orGy815A8GQqbOHl76j3R-cTjDV8tSHdJzTm-Y-L48i08d4o3fUEGVJ3zB93eD-E9xIDdfb-H5mo1sivctz8XEfpBo9HkB5qOfSE6rhb5GsMe2eYMmOJYsyg)

**建立如下的分割**

![](https://lh6.googleusercontent.com/UU8SZTGW4uNR3FcBtoOhsSuWuXee4scKx9ycZK_wo9bZxM_C2uUNv7ozLKOdxWbHbKBQZH9HR9e_B1Vx49vTIVv5drJfjvL6v1FE9Z7CRwbY9NPqJ1UAtG0Jjn5n0yUk9q1VEg)

**下載筆者的shell，放到/opt/tools/**

![](https://lh4.googleusercontent.com/5P-4j5Bn7rdPLKywRWA-HX-Bs9ex2YWBYhCSuPNZuW5KcUMunDnH1C2gIfI-MA0I480J7ZF3RPBRMZn0ZIT3-73fKdy2DwqWYHiZcaglsCMll3CRJEc0itTMQntDhO1f5w8Tdw)

**如下圖執行：**

![](https://lh3.googleusercontent.com/7Zo4ZPOzoGajMI0hia9pNZ_-8B2d1n-cMWnqFb1g_KM2dYDsMqUcF1wTfEmannxZG3Q7iNd0JIgRCeYlMX_Vu7cM3-InrsijD-gBW33jrDBRuOSgbLfpguGsA2zhDCMLvDiGiA)

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

![](https://lh5.googleusercontent.com/Vf3ucAjtEffyD-NinclJX2IDPG2pkMHtcBOyg0PHu0XzKBA0I8Ib3NvZA3u0wmYERfB11u8dV4lg6KoA9bm-qohPlQdRRlR3-J9Opg0CxYa5gS56nlCq-2IhRdJpOzxVeZNEpw)

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

![](https://lh4.googleusercontent.com/L9nA6hajCF5n8H1-dYUz21p45wseYkd-bvBflqL-iFNI-BScUjTNLvnfTjC8z2sc8mBsXLFgKRFwQ0GkwE3ragp8paUuqKtWPWcyhFMouLJkfAvK0zPC71icsVaPMuTYRmuY9g)

**停機，建立新的虛擬硬碟，作為btrfs的專用磁區**\
![](https://lh5.googleusercontent.com/s4GHnHKOX4to4UOfxBiIK1aHwXmHaAiyqtVNJQFYQcSsyzHi3N4OPcmZl-gT7Lz0GqSR0CEz9YH63Gp4ywvOd4jMtVLzBjSrnUm2oBYOrXC4j4NZ2JskAlmXT2RGSVPLVscdSQ)

![](https://lh5.googleusercontent.com/ZwjVE919LzKJGSNVeh06bB2PWtvWMjJcJjBd7w284ePRo__6xVpBwWWvZpRnY_MXDFldDGH71HBppIcHGM_V654CtRrsJKV8MnAG5dgWrgrve2aSVm9xlR4woEQqrvjnhfcGAw)

![](https://lh5.googleusercontent.com/3AlmIyt5-_VpIf-G3aNikc9CE1bxyCJ8v55Cu8edvCdZXcQxqBPpdcQ4S7a75yqjDMA28ORDTU8ilsOJ2c84Ia5JV6WINcQWR9LKRUQjOlYwE4XiWL-Twvpuv4pnVPJDakXYdQ)

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

![](https://lh3.googleusercontent.com/H1oZLHAl6KdPGtgbjy5Xp9T2vdMoIp0x5DhuOQn8rCfFmxadrmJcvCyUWvtijdi7A8Mf1wiZ4_qZtxWbvdZ0I0jjg6je6BlefJJmTUhw_jCFsUvjnFZI0yGDfee1FYxyymwEpw)

![](https://lh6.googleusercontent.com/Rxpkye6Ggz6erqjqHcWwXLqUEdLga1v5AaLZuSengfGoJPQAqCTYhxX9BltWuVi9vhEAWJMxAM7yTXfpAyd47MgLTBn_PaebHW6YMmP3IsTXs1qXZeS-1pTKg6hXBNhaM8OiXQ)

**開機時，自動掛載該空間**

**sudo vi /etc/rc.local**

![](https://lh6.googleusercontent.com/kuiJEIzeRU1OQWHrSAnJB3h6R5CC0y5D2TDiEHQRTfQoorQ4x2EyiIDQezL_JJowD3z5kMnXxav3MeCRhx0-uE1O54QtcwA18t0YKVyjC8XgIT3OG1NNk5BEf9eqpQPx_PEhng)

![](https://lh4.googleusercontent.com/0Gfn-tZA-aQI8uhKTffctLlHL2HzMZBifRjTuSM226VsLYqy34af74p6ZCuyxko-ezob9O4o7VQfcu_u2XBJ32bq9BOqSGcCjJe2OW_HWVJU6jRXsPjUS22TTe5TNT0Fl_Zjgg)

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

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

![](https://lh3.googleusercontent.com/dtmC0_tL6RLK-dbBZnjQDtcux0Go4sCDhaIb_CdeIac7rPa9709lR3aqHGnafWuVFbXSqfkLnqEmCmKCUClfp9c2WSXI4OKGe1Ke69cAH5TR38AV5zt34h5_D9i2iX5AGGLhtA)

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

![](https://lh4.googleusercontent.com/UPXGjA0yTllFALvZ2SQJL_VRK3a1kkoxooCrWYozr3EDvy-Sxcwv_AxYeQe5yunwbzrFIk_V0q5MiOMgIHc0t8BPBkQffP-o1Rjys-crdjZcaNb93up3x6xwuEQlDIAR7HdZzg)

![](https://lh6.googleusercontent.com/ptiyNTujF5PQNK2P4eNmPLlnAOLhgW87f4a7yz-EfJJeQYRQUxbo873AHUjd7En41ubQJn1ctCdiDSVb2pCQMoOx0acWG5m1jfJirWUUpeYnK75F8yQ20QrjwlSoBrnEchJgsA)

![](https://lh4.googleusercontent.com/A_F48r-t0mpMYTNB2RO5p_XMHYF2aD9iBEE_qTJKcfJopBuKfRItNA_siussBXURl02MzUupB8Su_iyqkmd-LLTABjw9X5ghfFZ0-a1TO_bEKLqdYg7pd04m2YuutBD7ngjdCw)

![](https://lh4.googleusercontent.com/cS0wPdI0TFGCjWm4R8pbegzkDmyMsTn-KRjcxlvycGF8A4-e20o0sQrTFewioSJKbH2TXeGzAnyI_sftfZcaYWj79vQViwaK9ldVaRmgWdEutDXHVkH5dgAcmLnqa-5gDbzKXA)

**啟動ssh**

**sudo service ssh start**<br>

**第一次同步**

**/var/lib/lxc/kawsingVEsite1**

![](https://lh5.googleusercontent.com/tGIVW0XbWV0yoa6a1rxrU6WcaZu2O_7iczJ4tMVFC1mMDmQPJB31iZFSGPBQknkBBNRKGPxyIFKy2SDEcGw8Vv22qIj5GnXRivfhOMVfvudOFB-OLW7BZXf8y_R0yTS5UZW--g)

**/var/lib/lxc/kawsingVEsite2**

**/var/lib/kawsingVE/kawsingVE/\***

![](https://lh5.googleusercontent.com/N70tuNOSDr6J3LqqFX4646CAgqyBAgmJAQOH7getoBo2WOn8fLhLezGoaTIPPmmu6R9vtjBzR7ESRM2uPHI59sAASNeBxhGIYLhyMcNvQPAyBD42lR8Mcrgt0o-J64S2r7RA7g)

**/var/lib/kawsingVE/kawsingVEsite1/\***

![](https://lh3.googleusercontent.com/iXzkEkVJ_OTQLuHWJc3yfaZq_qOMkKjfpaWXj1-EgDzYuolpLrcTBPvZClviUjSBIGBj2P5l3OFYggikpCcbmCPX1CGhudXGATmWek2-mgPPleN2bog5x9NOL9EHrBADQUFC8Q)

**/var/lib/kawsingVE/kawsingVEsite2/\***

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

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

**/var/lib/kawsingVE/kawsingVEsite2最新的shot**<br>

**即可**<br>

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

**於HOST1主機以root身份執行：**

**sudo su**

**mkdir /root/.ssh**

**service ssh start**<br>

**於HOST2主機以root身份執行：**

**ssh-keygen**

![](https://lh6.googleusercontent.com/-5T9KDtTOIXfnNp5TerzoOSMODQk08EWyUX72joRFXHcxH0_5p8risf0k4T83x0i8qq9NIg7b60Ow9Ljln50XRfHcBIM_C2XR_btXF2TgwTpE_LYg38CE8XMslvzcd1x1Ls1MQ)

![](https://lh5.googleusercontent.com/6GurX40zL53r1_Tj6T2-5JdU88kkRJFFJB89YiW6MYPX2nPT7Z9O10B80Ula3Yw5EH8afk_-nOaSj9eTm4CnJTJkQTOty6xLnDEDJs14YAkVVBnjjBAjzyGLT4Laa1dMQ1Fseg)

**scp authorized\_keys root\@192.168.56.1:/root/.ssh/**

**rm -f authorized\_keys**

**測試：**

**ssh -l root 192.168.56.1**

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

**執行備份最新的快照：**

![](https://lh3.googleusercontent.com/mUwbuKZPBseotMUM1dL5lheMXsrFuu4Dr6wMY2rjQh9s9CKUKXPI_m-qBhKOMKY4DxHB9uYJMEbK0RwGwapQRcVORef-Ozi9tsZq8NV490HAXf5jn_00lCTQqFhQDZ0Z6NQmvQ)

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

![](https://lh3.googleusercontent.com/ZORc1sh8swt6Wj9HkBWsgFtT9bZ-BKnnznL6IyRA5c7G1wxFailsSrJPGjSvliZLpIOuHkSvlZurIZpPxztsnifd91QVd6K7wqO2FcB0rTsMH8p09vH7u7IKqvZn6geIA3-fdQ)

**從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/**&#x20;

**rsync -azvP root\@192.168.56.1:/var/lib/lxc/kawsingVE/newkawsingVEsite2/ /var/lib/lxc/kawsingVE/kawsingVEsite2/**&#x20;

**---------------------------------------------------------**

**crontab -e**

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

**這樣，就能定時備份HOST1的最新快照**\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\ <br>

**在VirtualBox下執行的LXC需要使用獨立網卡**\
![](https://lh5.googleusercontent.com/b2IFw0wMmC4qrCOM7aOVn5cFzLoYT6l5B-XdQcIDD7qN5gd9fgD-vteyPjIpHbtu7oGpCykQA5aVZun7e4BJkk-Zw6Gl6rlJs-OeyzfF2P5N3AvxOSzZgTaIMP6KOnZJ5jvUyg)\
**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)**

**lxc.network.name = eth0(lxc看到的)**<br>

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

![](https://lh4.googleusercontent.com/0eu9C0-vlUZz2UNZ3bjLMFkQ6AO8C4BFVhleVKardcgcwewHV9XLs6QEjbVdwIsCkMjmV2QC9s_Cz-p7uVSf1vPxV7BqihG-70_sdv01TQBeLKQo3pe-giWG_i2QbQ0Wy-imvA)

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

![](https://lh4.googleusercontent.com/7M5NvhzvvPn9T98zrGHUodPnw3RqpPj9QY_Pb4revnAnqDDnhhxgafm9etgxonXL7quH-dZtowzLfjxzqSRbxnDwCLZZBvACG3mroVWeTU__8u3OZImbp431O2EdUW0nEJTVWg)

**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**\
\ <br>

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

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