顯示具有 Linux-Debian-進階課程 標籤的文章。 顯示所有文章
顯示具有 Linux-Debian-進階課程 標籤的文章。 顯示所有文章

2015年5月29日 星期五

Diskless Remote Boot in Linux

一、其他補充:


# 睡眠 (一鍵可叫醒)
systemctl suspend

# 休眠 (按 Power 才可叫醒)
systemctl hibernate
======================================================

二、建無硬碟可開機之 Linux 虛擬機


1. 執行 PXE Server & buildlinux1.sh

用網路 PXE 安裝,完成安裝 linux1.img
hostname: pxeboot
domainname: my.com
mirror: 192.168.10.254

2. 備份一個 linux1.img

qemu-img convert -O raw linux1.img linux1.img.bak

================= 於 linux1.img 機器中設定 =================

3. 改 initramfs 設定

於 linux1.img 機器中設定,皆使用 root 權限
vi /etc/initramfs-tools/initramfs.conf

搜尋這兩個,並註解:
MODULES=most
BOOT=local

改成 or 如果沒有就自行新增:
#MODULES=most
MODULES=netboot
#BOOT=local
BOOT=nfs

4. 準備開機 Kernel & Initrd

mkdir -p /root/pxeboot
cd /root/pxeboot
mkinitramfs -o ./initrd.img
cp /boot/vmlinuz-3.16.0-4-amd64 ./vmlinuz
ls -l

確認有兩個檔案:
initrd.img
vmlinuz

================= 於 pxeserver.img 機器中設定 =================

5. 檢查虛擬機硬碟容量

進入 pxeserver 查看 /srv 目錄之容量,
架單台 Diskless 機器必需要大於 4 GB 空間,
若有大於則跳過步驟 6.
df -h

6. 擴充虛擬機容量

a. 關閉 pxeserver 虛擬機


b. 新增 10 GB hdb.img 給 pxeserver.img 使用:

qemu-img create hdb.img 10G

c. 修改 runpxe.sh ,新增:

HDB=hdb.img
-hdb $HDB

e. 開機、分割、格式化

sh runpxe.sh
fdisk /dev/sdb
n
p
1
enter
enter
w

mkfs.xfs /dev/sdb1

f. 設定 /dev/sdb1 自動掛載

blkid /dev/sdb1 >> /etc/fstab
vi /etc/fstab
改成下面格式:

UUID=XXXXXXXXX /srv/nfs xfs defaults 1 2

檢查錯誤 (正確的話不會有訊息)
mount -a 

reboot
df -h
mount

查看有無成功掛載 sdb1 至 pxeserver:/srv/nfs 目錄。

7. 架設 NFS Server

於 pxeserver.img 虛擬機器中
apt-get install nfs-kernel-server
mkdir -p /srv/nfs/disklessboot
vi /etc/exports

設定檔內容如下:
/srv/nfs/disklessboot 192.168.10.0/24(rw,no_root_squash,async,no_subtree_check)

exportfs -a
/etc/init.d/nfs-kernel-server restart

showmount -e localhost
輸出:
Export list for localhost:
/srv/nfs/disklessboot 192.168.10.0/24

從同網段(192.168.10.0/24) 的別台機器(例如 實體機或linux1.img) 上檢查 NFS Server:
showmount -e 192.168.10.254
輸出:
Export list for localhost:
/srv/nfs/disklessboot 192.168.10.0/24

================= 於 linux1.img 機器中設定 =================
# 將 linnux1.img 上之 rootfs 複製到 pxeserver 之 /srv/nfs/disklessboot 目錄

8. 掛載 NFS 

於 linux1.img 虛擬機器中:
sudo apt-get install nfs-common
mkdir -p /dev/nfs
sudo mount -t nfs -nolock 192.168.10.254:/srv/nfs/disklessboot /dev/nfs
df -h

9. 複製 rootfs 到 pxeserver NFS 目錄

cp -avx /. /dev/nfs/.
cp -avx /dev/. /dev/nfs/dev/.

================= 於 pxeserver.img 機器中設定 =================
回到 pxeserver 下指令:

10. 將 vmlinuz 及 initrd.img 移到 TFTP Server 目錄

mkdir -p /srv/tftp/disklessboot
cp /srv/nfs/disklessboot/root/pxeboot/vmlinuz /srv/tftp/disklessboot/
cp /srv/nfs/disklessboot/root/pxeboot/initrd.img /srv/tftp/disklessboot/

11. 修改 rootfs 網路設定檔

vi /srv/nfs/disklessboot/etc/network/interfaces

#allow-hotplug eth0
#iface eth0 inet dhcp
iface eth0 inet manual

12. 修改 rootfs 自動掛載設定檔

vi /srv/nfs/disklessboot/etc/fstab

舊的全部註解掉,新增以下內容:

proc            /proc           proc    defaults        0       0
/dev/nfs        /               nfs     defaults        1       1
none            /tmp            tmpfs   defaults        0       0
none            /var/run        tmpfs   defaults        0       0
none            /var/lock       tmpfs   defaults        0       0
none            /var/tmp        tmpfs   defaults        0       0

13. 設定 TFTP 網路開機選單

vi /srv/tftp/debian-installer/amd64/boot-screens/menu.cfg

include mybootmenu.cfg

vi /srv/tftp/mybootmenu.cfg
label My Diskless Boot PC
kernel disklessboot/vmlinuz
append initrd=disklessboot/initrd.img root=/dev/nfs nfsroot=192.168.10.254:/srv/nfs/disklessboot ip=dhcp rw

chmod 777 -R /srv/tftp

================= 回到實體機中測試 =================
關閉 linux1.img 虛擬機器後,修改網路開機至 runlinux1.sh 檔:
-boot n

開機後,選單出現 "My Diskless Boot PC" ,用此開機。





Reference:

http://www.serenux.com/2011/04/howto-create-a-diskless-workstation-that-boots-from-pxe-using-ubuntu/

DisklessUbuntuHowto

Linux Terminal Server Project






mirror 連線問題 & buildlinux.sh 除錯


虛擬機操作及除錯方法:

當安裝步驟到手動輸入 mirror 之 hostname,輸入 192.168.10.245,
若無法順利取得鏡像站,可以使用
Ctrl + Alt + F 虛擬機全螢幕
Ctrl + Alt
Alt + F4 進入文字模式查看 Error
Alt + F1 切回安裝介面

若看到以下相關訊息:
DEBUG: resolver (libc6-udeb): package doesn't exist (ignored)
....
INFO: Menu item 'download-installer' selected
....

等相關訊息,則問題可能有兩種:

問題一:
鏡像站目錄 /home/ftp/debian 權限設定錯誤

解決一:
寫一個 Script 變更  /home/ftp/debian 檔案目錄之權限
vi mirror_permision.sh
#!/bin/bash
#2015/05/22
#change /home/ftp/debian permision

DIR=/home/ftp/debian

chown root.root -Rv $DIR
chmod ug-s -Rv $DIR
find $DIR -type -d -exec chmod 755 {} +
find $DIR -type -f -exec chmod 644 {} +

====================================================
問題二:
鏡像站目錄 /home/ftp/debian 內有缺檔案

解決二:
修正 getdeb.sh 檔,更新鏡像站資料至 /home/ftp/debian

vi getdeb.sh
#HOST=ftp.tw.debian.org
HOST=debian.nctu.edu.tw
#HOST=opensource.nchc.org.tw
#HOST=ftp.wa.au.debian.org
#HOST=120.117.72.71

# 國外鏡像站
#HOST=ftp.debian.org

debmirror \
        --arch=i386,amd64,armel,armhf,sha4 \
        --dist=jessie,jessie-updates \
        --di-arch=i386,amd64,armel \
        --di-dist=stable \
        --host=$HOST \
        --root=":debian" \
        --diff=none -p \
        --nosource \
        --method=rsync \
        --section main,contrib,non-free,main/debian-installer \
        --i18n \
        --ignore-release-gpg /home/ftp/debian/ ;

        #--section non-free,contrib,main,main/debian-installer,main/installer-armel,main/i18n,main/source \
#debmirror \
#       -v --nosource -d lenny/updates -a i386 \
#       -s non-free,contrib,main,main/debian-installer \
 #    --method=http -h security.debian.org \
 #    --ignore-release-gpg -r /debian-security /home/ftp/debian/security/
#       --section main,contrib,non-free,main/debian-installer,main/installer-armel,main/i18n,main/source \

#wget -r -l1 -nH ftp://$HOST/debian/dists/squeeze/main/source/
date

或是可以自行手動找
ftp://ftp.tw.debian.org/debian/pool/main/e/eglibc/libc6-udeb*
及
ftp://ftp.tw.debian.org/debian/dists/jessie/main/installer*







2015年5月28日 星期四

DNS Server & 連上自建的 Mirror 鏡像站


一、說明 DNS

1. 設定檔
於校內設定如下,要經過學校計中所架之 DNS Server 才能連至 Internet
cat /etc/resolv.conf

domain stust.edu.tw
search stust.edu.tw
nameserver 120.117.2.2
nameserver 120.117.2.1

2. 定義目標
寫出我們所需要的需求及設定目標,如下:
192.168.10.1    -> host1.my.com, gateway.my.com
192.168.10.2    -> host2.my.com
...
192.168.10.253 -> host254.my.com
192.168.10.254  -> host254.my.com, pxe.my.com, dns.my.com

二、架設 DNS Server

0. 開機 PXE Server
runpxe.sh

整個 DNS Server 也同樣建在 pxeserver.img 虛擬機內。

1. 安裝
apt-get install bind9

說明:bind9 是 domainname servver 套件

2. 設定正解
vi /etc/bind/named.conf.default-zones

zone "my.com" IN {
        type master;
        file "/etc/bind/db-my.com";
        allow-update { none; };
};

vi /etc/bind/db-my.com

$TTL            86400
$ORIGIN         my.com.
@               1D IN SOA               @ my.com. (
                                        2015052211          ;
                                        3H                  ; refresh
                                        15M                 ; retry
                                        1W                  ; expiry
                                        1D )                ; minimum

@                       IN NS           dns.my.com.
dns             IN A            192.168.10.254
gateway                 IN A            192.168.10.1
pxe                     IN A            192.168.10.254
host1                   IN A            192.168.10.1
host2                   IN A            192.168.10.2
...(略過,請用 Shell Script 技巧完成 host1 ~ host254)
host254                 IN A            192.168.10.254

3. 加入 nameserver 至設定檔:
 vi /etc/resolv.conf

search my.com
nameserver 192.168.10.254

4. 正解查詢
nslookup host1.my.com
nslookup pxe
nslookup gateway
nslookup host254
...

5. 設定反解
vi /etc/bind/named.conf.default-zones

zone "10.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db-192.168.10";
        allow-update { none; };
};

vi /etc/bind/db-192.168.10

$TTL    86400
@       IN      SOA     my.com. dns.my.com. (
                                      2015052211 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum

                IN NS           my.com.
1               IN PTR          host1.my.com.
1               IN PTR          gateway.my.com.
2               IN PTR          host2.my.com.
...
254             IN PTR          host254.my.com.
254             IN PTR          pxe.my.com.
254             IN PTR          dns.my.com.

6. 反解查詢
nslookup 192.168.10.254
nslookup www.google.com
dig www.google.com

如果虛擬網段 OK,但無法連至 Google ,則可能是防火牆問題,
要設定讓 br10 與 eth0 能夠通過防火牆,解決如下:

a. 切換至實體機

b. 下 iptables 設定指令
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A INPUT -i br10 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE












2015年5月25日 星期一

無痛升級(Wheezy to Debian 8.0)

目標:無痛升級至 Debian 8.0
-----------------------------------------------------------------------------------------------

一、前言:

Debian 8.0 Jessie 已於 2015/4/25 正式釋出,我們的系統目前仍是 Wheezy,如何
進行無痛升級就是一個很重要的課題。
-----------------------------------------------------------------------------------------------

二、備份:

在升級前有幾個目錄必須要備份
        1. /etc -> 本目錄列重要,有許多設定,包括使用者資料及網路服務等設定,這>些設定檔都已調整完。
        2. /var -> /var/cache/apt/archives 目錄下有許多已下載並完成安裝之 .deb >檔,這些檔案已不再需要,因此在備份 /var 目錄前請先執行: # apt-get clean 將這些>檔案清除。
        3. /home -> 這個目錄依之前的作法,是放在獨立的分割區,因此在安裝時要注意
不要洗掉,如此一來即可不必備份,但是要注意一些重要的檔案仍然要先複製到別顆硬碟。
        4. /boot/*config -> 這些 config  檔是之前編系統核心時所調整出來的編譯參>數,我們花了很多時間才調整出來,如果之後還要重編核心的話,請務必將這些 config 備
份。
        5. 製作已安裝檔案列表: dpkg -l > dpkg.log
        6. /usr/src -> 備份以前編譯的核心設定檔
        7. /root -> 看裡頭有沒有資料或 .sh 檔
        8. /srv/ftp -> 移至 /home/ftp
-----------------------------------------------------------------------------------------------

三、升級前準備


依經驗,升級完後的顯示卡驅動可能會出現問題,事先準備自己 Nvidia 驅動安裝檔,
以本作者的機器為例,使用的驅動為:
NVIDIA-Linux-x86_64-346.59.run
-----------------------------------------------------------------------------------------------

四、開始升級


1. 修改鏡像站檔案

將原本為 Wheezy 的 Mirror 改為 Jessie.
vi /etc/apt/sources.list

deb http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main

deb http://ftp.tw.debian.org/debian/ jessie main contrib non-free
deb-src http://ftp.tw.debian.org/debian/ jessie main contrib non-free

2. 更新系統 (步驟上至下)

apt-get update
apt-get upgrade
apt-get dist-upgrade

3. 重新開機

reboot

此時,可能無法順利開機進入,會卡在 Nvidia 問題。
-----------------------------------------------------------------------------------------------

五、開機除錯


1. 於開機選單按 "e" 進入編輯


2. 於 quiet 後面加入 init=/bin/bash, 接著按 Ctrl + X 進行開機


3. 重新掛載根目錄

mount -o loop,remount,rw /
mount -a

4. 刪除 nvidia 黑名單

rm -rf /etc/modprobe.d/nvidia-blacklists-nouveau.conf

5. 增加黑名單內容

vi /etc/modprobe.d/fbdev-blacklist.conf
blacklist nv
blacklist ast
blacklist nouveau

6. 重開機

Ctrl + Alt + Del

7. 卸載 Nvidia 驅動

移至驅動所在之目錄。
sh NVIDIA-Linux-x86_64-346.59.run --uninstall

7. 安裝新驅動

apt-get update

apt-get install nvidia-driver nvidia-cuda-toolkit nvidia-xconfig

若找不到套件,可以試試以下 Mirror 加到 /etc/apt/sources.list:
deb http://ftp.tw.debian.org/debian/ jessie main contrib non-free
deb-src http://ftp.tw.debian.org/debian/ jessie main contrib non-free

9. 進入 X-Windows 後,檢查版本:

hostnamectl
cat /etc/debian_version
cat /etc/issue
...



可以試試看有沒有 systemctl 這個指令。

###########################################################################

Debug:

若還是無法開機,請在文字介面執行:

#~ X -configure

則會出現新的config檔在家目錄裡,然後再進去看有沒有抓到nvidia

vim xorg.config.new

如果有再將此檔案複製蓋過原本檔案即可

#~ cp xorg.config.new /etc/X11/xorg.config

在登出成一般使用者 startx 就ok。






Reference:
http://linuxconfig.org/how-to-upgrade-debian-linux-system-from-wheezy-to-jessie-stable-release

http://linuxconfig.org/nvidia-geforce-driver-installation-on-debian-jessie-linux-8-64bit














2015年4月30日 星期四

架 DHCP Server 及 TFTP Server

上週課程延續問題:
可能遇到無法 update 的問題, apt-get update 輸出:
Release file for ftp://120.117.72.XX/debian/dists/wheezy-updates/Release is expired (invalid since 7d 4h 37min 49s). Updates for this repository will not be applied

這是因為自建鏡像站太久沒更新所造成的,可以先選擇連至其他鏡像站或以 getdeb.sh 更新。
getdeb.sh
#HOST=ftp.tw.debian.org
HOST=debian.nctu.edu.tw
#HOST=opensource.nchc.org.tw
#HOST=ftp.wa.au.debian.org
#HOST=120.117.72.71

# 國外鏡像站
#HOST=ftp.debian.org

debmirror \
        --arch=i386,amd64,armel,armhf,sha4 \
        --dist=jessie,jessie-updates \
        --di-arch=i386,amd64,armel \
        --di-dist=stable \
        --host=$HOST \
        --root=":debian" \
        --diff=none -p \
        --nosource \
        --method=rsync \
        --section main,contrib,non-free,main/debian-installer \
        --i18n \
        --ignore-release-gpg /home/ftp/debian/ ;

        #--section non-free,contrib,main,main/debian-installer,main/installer-armel,main/i18n,main/source \
#debmirror \
#       -v --nosource -d lenny/updates -a i386 \
#       -s non-free,contrib,main,main/debian-installer \
 #    --method=http -h security.debian.org \
 #    --ignore-release-gpg -r /debian-security /home/ftp/debian/security/
#       --section main,contrib,non-free,main/debian-installer,main/installer-armel,main/i18n,main/source \

#wget -r -l1 -nH ftp://$HOST/debian/dists/squeeze/main/source/
date


一、於 PXE 虛擬機架 DHCP Server

1. 安裝 dhcp
sh runpxeserver.sh

apt-get install isc-dhcp-server

裝完會出現 Start Faild 訊息,這是正常的,因為我們還沒改設定檔。

2. 修改設定檔 dhcpd.conf
vi /etc/dhcp/dhcpd.conf
option domain-name "example.org";
option domain-name-servers 120.117.2.1;

default-lease-time 600;
max-lease-time 7200;
allow booting;

subnet 192.168.10.0 netmask 255.255.255.0{
        range 192.168.10.100 192.168.10.200;
        option subnet-mask 255.255.255.0;
        option broadcast-address 192.168.10.255;
        option routers 192.168.10.1;
        option domain-name-servers 120.117.2.1;
#      next-server 192.168.10.254;
#      filename "pxelinux.0";

注意,若直接從網頁上複製貼上會出現亂碼,
遇到問題,需要 Debug 可以從 /var/log/syslog 查看訊息。
其中 DNS 要設為對學校的 120.117.2.1 ,router 即是 gateway 意思。

3. 重啟
/etc/init.d/isc-dhcp-server restart
systemctl enable isc-dhcp-server
systemctl status isc-dhcp-server

二、建 linux1.img 虛擬機
1. 於實體機建置
cd ~/qemu-img/virtual_classroom/
qemu-img create linux1.img 20G

2. 修改 build script 檔
複製 build.sh 檔,並做修改
cp buildpxe.sh buildlinux1.sh

記得修改最重要的兩項:
HDA=linux1.img
MAC="DE:AD:BE:CF:EC:B8"

3. 啟動測試 DHCP
sh buildlinux1.sh

只要 DHCP 的部份有順利連到即可,這週進度先不安裝。

三、開啟 winXP 虛擬機

1. 於 runwinXP.sh 加入虛擬網路卡
下面加入網卡:e1000, i82551, i82557b, i82559er, ne2k_pci, pcnet, rtl8139, virtio
-net nic,model=rtl8139
還有在 -hda $HDA 後方加入 -sdl

詳細設定如下:
CPU=host
SMP=4
MEMORY=2048
HDA=WinXp.img
MAC="DE:AD:BE:CF:EC:B9"
BRIDGE=br10
CDROM=/home/lin/iso/WindowsXP_Pro_SP2_CHT.iso

qemu-system-x86_64 -enable-kvm -cpu $CPU -smp $SMP -m $MEMORY \
-hda $HDA -sdl \
-cdrom $CDROM -boot c \
-net nic,macaddr=$MAC,model=rtl8139 -net bridge,br=$BRIDGE


2.進去更新 XP 
此時開機 XP,若之前有手動修改網路設定,現在要改為自動取得 IP,
正常要自動可以連到 DHCP 且有網路可以使用。

做 Windows 更新、升級至 XP SP3再去下載有的沒的需求:
Firefox
IE8
avira
FileZilla
...

四、於 PXE 虛擬機安裝 TFTP Server

1. 安裝 tftp
apt-get -y install tftpd-hpa

2. 下載網路開機套件 netboot.tar
wget http://ftp.debian.org/debian/dists/jessie/main/installer-amd64/current/images/netboot/netboot.tar.gz

3. 解壓至目錄 /srv/tftp 並重新啟動
tar xfva netboot.tar.gz -C /srv/tftp
/etc/init.d/tftpd-hpa restart
update-rc.d tftpd-hpa defaults
systemctl enable tftpd-hpa

4. 修改 /etc/dhcp/dhcpd.conf 設定
vi /etc/dhcp/dhcpd.conf

打開註解:
next-server 192.168.10.254;
filename "pxelinux.0";

5. 修改 buildlinux1.sh
vi buildlinux2.sh
CPU=host
SMP=2
MEMORY=1024
HDA=linux1.img
MAC="DE:AD:BE:CF:EC:B8"
BRIDGE=br10
CDROM=/home/lin/iso/debian-testing-amd64-CD-1.iso

qemu-system-x86_64 -enable-kvm -cpu $CPU -smp $SMP -m $MEMORY \
-hda $HDA \
-boot n \
-net nic,macaddr=$MAC -net bridge,br=$BRIDGE


執行 sh buildlinux1.sh 應該要可以連至網路






2015年3月30日 星期一

虛擬機鏡像站:NFS、FTP、Apache

一、實體機先測試鏡像站


1. 實體機修改 /etc/apt/sources.list

sudo vi /etc/apt/sources.list
# 安全性更新不動
deb http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main

## 假設我的實體機 IP:120.117.72.64
deb ftp://120.117.72.64/debian/ wheezy-updates main

deb ftp://120.117.72.64/debian/ wheezy main contrib non-free
## 下面兩條寫法也可以連至本機
#deb ftp://127.0.0.1/debian wheezy main contrib non-free
#deb file:///home/ftp/debian/ wheezy main contrib non-free

2. 實體機測試

sudo apt-get update
sudo apt-get upgrade

二、實體機架  NFS Server

為了將載好的 /home/ftp 目錄分享給 pxeserver.img 虛擬機使用:

1. 測試有無安裝

showmount -e localhost

正確輸出:
Export list for localhost:
/home/ftp 192.168.10.0/24

若輸出下面,即是告訴我們還沒裝 NFS 伺服器:
clnt_create: RPC: Program not registered

2. 安裝

sudo apt-get install nfs-kernel-server

3. 設定

sudo vi /etc/exports

加入:
/home/ftp 192.168.10.0/24(ro,sync,no_subtree_check)

4. 重啟 NFS

/etc/init.d/nfs-kernel-server restart

5. 再測試

showmount -e localhost

正確輸出:
Export list for localhost:
/home/ftp 192.168.10.0/24

三、虛擬機架  NFS 伺服器

1. 虛擬機手動掛載 NFS

先建立掛載目錄:
mkdir /home/ftp

手動掛載:
mount -t nfs 192.168.10.1:/home/ftp /home/ftp

2. 虛擬機檢查掛載

mount
df -h
cd /home/ftp ; ls -l

會看到 /home/ftp 裡面要實體機所下載的鏡像站資料。

3. 虛擬機設定自動掛載 NFS

修改設定檔:
vi /etc/fstab

加入:
192.168.10.1:/home/ftp /home/ftp nfs defaults 1 2

4. 虛擬機測試 NFS

先將原先的掛載卸除:
umount /home/ftp

** 如果無法 umount 就先關閉 proftpd 就能關了!
/etc/init.d/proftpd stop

打指令執行 /etc/fstab 的設定:

mount -a
df -h

指令 mount -a 正確的話,不會有什麼訊息

四、虛擬機架  FTP 伺服器


基本設定同實體機的方法。

1. 虛擬機安裝

sudo apt-get install proftpd-basic

2. 虛擬機設定 /etc/proftpd/proftpd.conf

sudo vi /etc/proftpd/proftpd.conf

搜尋 Anonymous ,解除註解,完成如下結果:
User                         ftp
   Group                                nogroup
   # We want clients to be able to login with "anonymous" as well as "ftp"
   UserAlias                    anonymous ftp
   # Cosmetic changes, all files belongs to ftp user
   DirFakeUser  on ftp
   DirFakeGroup on ftp

   RequireValidShell            off

   # Limit the maximum number of anonymous logins
   MaxClients                   10

   # We want 'welcome.msg' displayed at login, and '.message' displayed
   # in each newly chdired directory.
   DisplayLogin                 welcome.msg
   DisplayChdir         .message

   # Limit WRITE everywhere in the anonymous chroot
   
     
       DenyAll
     
   

   # Uncomment this if you're brave.
   # 
   #   # Umask 022 is a good standard umask to prevent new files and dirs
   #   # (second parm) from being group and world writable.
   #   Umask                            022  022
   #            
   #            DenyAll
   #            
   #            
   #            AllowAll
   #            
   # 

3. 虛擬機設 /etc/passwd 之 FPT 目錄路徑

sudo vi /etc/passwd

搜尋 ftp ,將其中的目錄路徑改為 /home/ftp

4. 測試

使用實體機開瀏灠器來測試,
URL 為 pxeserver.img 的 IP: 192.168.10.254

正常會看到同虛擬機的 /home/ftp 目錄下的東西 。

若無法連上 pxeserver 之 FTP 站,請設定防火牆,於實體機執行:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A INPUT -i br10 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE

5. 虛擬機讓 FTP 下次開機後都自動執行

systemctl status proftpd
systemctl enable proftpd




五、虛擬機架 Apache Server

apt-get install apache2

vi /etc/apache2/apache2.conf
將底下片改為 /home/ftp:
<Directory /home/ftp>
        Options Indexes
        AllowOverride None
        Require all granted
</Directory>
vi /etc/apache2/sites-available/000-default.conf
修改為:
#DocumentRoot /var/www/html
DocumentRoot /home/ftp
/etc/init.d/apache2 restart

六、於實體機連線至 pxeserver.img 鏡像站更新

vi /etc/apt/sources.list

deb ftp://192.168.10.254/debian/ wheezy main contrib non-free
deb ftp://192.168.10.254/debian/ wheezy-updates main

成功之後的 pxe server 就是我們整個虛擬教室的 ftp 站。

七、其他

做最原始的 WinXP.img 備份
cp WinXP.img WinXP_bare.img
qemu-img convert -O raw WinXP.img WinXP_ok.img









架設鏡像站( 下載鏡像站、FTP Server、異質網段、img 備份)

一、實體機下載鏡像站


1. 確認空間容量 > 210 GB

請先確認 /home 目錄的可用量容大於 210 GB,
我們要下載 Wheezy, Jessie 之鏡像站資料,需要大量空間。

查看指令:
df -h 

2. 建立目錄 /home/ftp

從南臺 PM 私人鏡像站抓 mirror 檔(需要很長時間,檔案量約 200 GB):
sudo mkdir /home/ftp
sudo cd /home/ftp
sudo wget -t 0 -m ftp://120.117.72.71/debian/

3. 移動檔案位置

下載下來的資料會放在 120.117.72.71/ 這個目錄下,
我們要將裡面的 debian 目錄往上一層移動 。
(注意移 debian 沒有鈄線,要移的是整個目錄)
cd /home/ftp/120.117.72.71/
mv debian ..

確認 120.117.72.71/ 移乾淨後,可以清除:
du -sh 120.117.72.71
rm -r 120.117.72.71

二、實體機架 FTP 伺服器


1. 下載

sudo apt-get install proftpd-basic

2.設定檔 proftpd.conf

sudo vi /etc/proftpd/proftpd.conf

搜尋 Anonymous ,解除註解,完成如下結果:

 <Anonymous ~ftp>
   User                         ftp
   Group                                nogroup
   # We want clients to be able to login with "anonymous" as well as "ftp"
   UserAlias                    anonymous ftp
   # Cosmetic changes, all files belongs to ftp user
   DirFakeUser  on ftp
   DirFakeGroup on ftp

   RequireValidShell            off

   # Limit the maximum number of anonymous logins
   MaxClients                   10

   # We want 'welcome.msg' displayed at login, and '.message' displayed
   # in each newly chdired directory.
   DisplayLogin                 welcome.msg
   DisplayChdir         .message

   # Limit WRITE everywhere in the anonymous chroot
   <Directory *>
     <Limit WRITE>
       DenyAll
     </Limit>
   </Directory>

   # Uncomment this if you're brave.
   # <Directory incoming>
   #   # Umask 022 is a good standard umask to prevent new files and dirs
   #   # (second parm) from being group and world writable.
   #   Umask                            022  022
   #            <Limit READ WRITE>
   #            DenyAll
   #            </Limit>
   #            <Limit STOR>
   #            AllowAll
   #            </Limit>
   # </Directory>

 </Anonymous>

3. FTP 目錄路徑

sudo vi /etc/passwd

搜尋 ftp ,將其中的目錄路徑改為 /home/ftp

4. 開啟瀏灠器測試

URL 為自己實體機的 IP,成功時要可以看到自己下載的 mirror 檔案,及 debian 目錄。

三、建立異質網段

建立一個自給自足的內網,其網段為 192.168.10.0/24,內網的主要機器為 pxe server,>在內網中要有不同作業系統,不同硬體架構之主機。例如:

WindowsXP
ARM
CentOS
…
等機器,這些機器可以透過我們所建立的橋彼此互相溝通

目前定義如下:
pxeserver       -> pxeserver.img        192.168.10.254
Windows XP      -> WinXp.img            192.168.10.100

四、補充: 建立 Windows XP 虛擬機:


1. iso 檔及開通序號

請自行先準備一個 windows_xp.iso 及序號,這邊不提供。

2. 建 WinXP.img

(注意這邊 MAC 網卡卡號不要跟 pxeserver.img 的一樣)
qemu-img create WinXP.img 10G

3. 接下來寫一個 buildxp.sh,並執行安裝 XP:

CPU=host
SMP=2
MEMORY=1024
HDA=WinXP.img
MAC="DE:AD:BE:CF:EC:B9"
BRIDGE=br10
CDROM=windows_xp.iso

qemu-system-x86_64 -enable-kvm -cpu $CPU -smp $SMP -m $MEMORY \
-hda $HDA \
-cdrom $CDROM -boot d \
-net nic,macaddr=$MAC -net bridge,br=$BRIDGE

4. 解決 WinXP.img 網路問題:

首先了解,進 XP 後會找不到網卡裝置,
所以需要在虛擬機設定參數給虛擬網卡,
網卡設定參考資料:
http://en.wikibooks.org/wiki/QEMU/Devices/Network

這邊我使用 Realtek Fast Ethernet ,支援度較佳,
寫一個 runxp.sh :

CPU=host
SMP=2
MEMORY=1024
HDA=WinXP.img
MAC="DE:AD:BE:CF:EC:B9"
BRIDGE=br10
CDROM=windows_xp.iso

qemu-system-x86_64 -enable-kvm -cpu $CPU -smp $SMP -m $MEMORY \
-hda $HDA \
-cdrom $CDROM -boot c \
-net nic,model=rtl8139,macaddr=$MAC -net bridge,br=$BRIDGE

5. 做 img 備份

cp WinXP.img WinXP_bare.img
qemu-img convert -O raw WinXP.img WinXP_ok.img













2015年3月20日 星期五

顯卡驅動、橋接、建虛擬機

一、驅動顯卡

承上一章 行前準備,用新編好的核心 linux-3.14.34 開機,接下來安裝顯卡驅動。

相關文章:
安裝 Nvidia 顯卡驅動

1. 查看顯卡

lspci

找到顯卡型號,輸出如下:
01:00.0 VGA compatible controller: NVIDIA Corporation GF119 [GeForce GT 620] (rev a1) (prog-if 00 [VGA controller])

2. 至 Nvidia 官方下載最新驅動:

點此下載 347.88 版驅動

3. 關閉 Linux 開放源始碼之 NV 驅動

rmmod nouveau
echo "blacklist nouveau" >> /etc/modprobe.d/fbdev-blacklist.conf

4. 重開機,並安裝 NV 347.88 驅動

reboot
sh NVIDIA-Linux-x86_64-346.47.run

之後都選 yes 下一步來進行。

5. 確認顯卡驅動

可以用指令查看
xdpyinfo
lsmod | grep nvidia

更進一步可以開繪圖軟體測試,例如:
Blender > File > User Preferences > System > CUDA > Geforce GT 620

二、橋接網路設定

相關文章:
Bridge 建立橋接網路(QEMU Debug)

1. 先設定建置目標:

實體機器 - wheezy (Debian Stable)
  • 實體網路 eth0,P503 主機上 IP
  • 建立橋接網路 br10 (IP:192.168.10.1)
  • 裝有 QEMU-Linaro 虛擬機
  • 下載鏡像站 Mirror 至 /home/$USER/ftp
  • 裝有 FTP 掛上鏡像站 (proftpd)
  • 設定防火牆 (iptable)

PXE Server 虛擬機器 - Jessie (Debian Testing)
  • IP:192.168.10.254
  • TFTP Server (tftpd-hpa)
  • HTTP Server (apache2)
  • DHCP Server (isc-dhcp-server)

虛擬機器 - Windows XP
  • IP:192.168.10.100
  • 裝來玩的

2. 建立橋接網路 br10

2.1 手動指令

查看橋接網路 Bridge:
brctl show

做出一個橋接:
brctl addbr br0
brctl show
ifconfig br0

做連接,假設 br0 連到 eth0
brctl addif br0 eth0
brctl show

想要移除可以輸入指令:
brctl delif br0 eth0
brctl delbr br0
brctl show
ifconfig

2.2 修改設定檔

設定檔 /etc/network/interfaces,eth0 及 lo 保持不動,
自訂名稱及網段,但不建議使用 192.168.0.xx,
容易跟家裡的無線網路衝到 ip,
這邊筆者設名稱:br10/網段:192.168.10.xx

設定檔如下:
auto br10
iface br10 inet static
       address 192.168.10.1
       netmask 255.255.255.0
       gateway 實體機ip
       bridge_ports tap0
       bridge_fd 9
       bridge_hello 2
       bridge_maxage 12
       bridge_stp off

重啟網卡並查看有無 br10 出現
/etc/init.d/networking restart
ifconfig br10
ping 192.168.10.1

3. 安裝 QEMU-Linaro (不用完整 support)

參考文章:
安裝 QEMU Linaro 完整版

3.1 下載 QEMU-Linaro

請至官方下載最新版,並自行編譯後安裝起來。
點此下載 qemu-linaro-1.7.0-2014.01.tar.gz

3.2 編譯及安裝 

(橋接網路只要基礎安裝即可)

tar xfva qemu-linaro-1.7.0-2014.01.tar.gz
cd qemu-linaro-1.7.0-2014.01/
./configure
make -j 8
sudo make install

裝完後檢查一下版本:
which qemu-system-x86_64
輸出:
/usr/local/bin/qemu-system-x86_64

把它複製下來,查看版本
/usr/local/bin/qemu-system-x86_64 -version

輸出:
QEMU emulator version 1.7.0 (qemu-linaro 2014.01), Copyright (c) 2003-2008 Fabrice Bellard

以上輸出,即表示目前所使用的 QEMU 版本為 1.7.0 (qemu-linaro 2014.01)


若遇到 Bug 問題,可以至 安裝 QEMU Linaro 完整版 爬文。

4. 建立 pexserver.img

4.0 下載 Debian-Jessie

debian-testing-amd64-CD-1.iso

4.1 建立資料夾

mkdir -p ~/qemu_image/virtual_classroom

4.2 建立 10 GB 之 image 檔

qemu-img create pxeserver.img 10G

4.3 寫一個 buildpxe.sh

 若遇到無法開啟的問題,請爬看 Bridge 建立橋接網路(QEMU Debug) 文章下方 Debug 區。

CPU=host
SMP=2
MEMORY=1024
HDA=pxeserver.img
MAC="DE:AD:BE:CF:EC:B7"
BRIDGE=br10
CDROM=debian-testing-amd64-CD-1.iso

qemu-system-x86_64 -enable-kvm -cpu $CPU -smp $SMP -m $MEMORY \
-hda $HDA \
-cdrom $CDROM -boot d \
-net nic,macaddr=$MAC -net bridge,br=$BRIDGE

4.4 Debian Jessie 分割設定 ( PXE Server)

partition1 / root / 2.5G / XFS
partition2 / swap / 0.5G / swap
partition3 / home / 剩下容量 / XFS

其他 Bug 排除,參考文章:Bridge 建立橋接網路(QEMU Debug) 下方內容。

如果遇到 modules 目題,可能就要重新做核心編譯,
找到所缺少的模組。











15/03/16 行前準備

一、行前準備:

1. 安裝工具介紹: X86/ARM Toolchain

1.1 執行底下指令:

# apt-get install gcc cpp g++

1.2 安裝完後來驗證 gcc/cpp/g++ 之版本

gcc -v
cpp -v
g++ -v

其它工具,例如 nasm 或是 java 等暫跳過,等遇到的時候再來安裝。

2. 使用 x86 toolchai 來升級 Linux 核心

2.1 核心升級,請安裝以下套件:

sudo apt-get install kernel-package libncures5-dev bzip2 xz-utils

2.2下載核心並建立連結

wget ftp://120.117.72.71/advlinux/linux-3.14.34.tar.xz
su
tar xfva linux-3.14.34.tar.xz -C /usr/src
ln -s /usr/src/linux-3.14.34 linux
cd linux

2.3 編譯 Linux 核心

a. 選單 .config 設定 
先至原始核心內複製基礎 config 檔案 
cp /boot/config-3.2.0-4-amd64 /usr/src/linux/.config

b. 設定選單 (於 /usr/src/linux 目錄下)
make menuconfig

可以使用幾個指令查看目前硬體,依硬體設備及需求來設定屬於自己的核心參數:
lspci -v
lsusb
cat /proc/cpuinfo

以下是我的電腦設定,以南臺 P503 教室電腦為例:
→ General setup → Kernel compression mode (XZ)

→ Processor type and features → Processor family (Core 2/newer Xeon)

→ Power management and ACPI options → CPU Frequency scaling →  Default CPUFreq governor (ondemand)

→ Power management and ACPI options → CPU Frequency scaling → x86 CPU frequency scaling drivers → [ ] Intel P state control

→ Power management and ACPI options → CPU Frequency scaling → x86 CPU frequency scaling drivers → <  > AMD...

→ Networking support → Networking options → Network packet filtering framework (Netfilter) → Core Netfilter Configuration →  Netfilter nf_tables...

→ Networking support → Networking options → Network packet filtering framework (Netfilter) → Core Netfilter Configuration →  ... match support

→ Networking support → Networking options → Network packet filtering framework (Netfilter) → Core Netfilter Configuration →  Netfilter nf_tables ...

→ Networking support → Networking options → Network packet filtering framework (Netfilter) → Core Netfilter Configuration →  Netfilter ....

→ Networking support → Networking options → Network packet filtering framework (Netfilter) → IP: Netfilter Configuration →  IPv4 nf_tables ...

→ Networking support → Networking options → Network packet filtering framework (Netfilter) → IP: Netfilter Configuration →  IPv4 NAT

→ Networking support → Networking options → Network packet filtering framework (Netfilter) → IPv6: Netfilter Configuration →  IPv6 nf_tables ...

→ Networking support → Networking options → Network packet filtering framework (Netfilter) → IPv6: Netfilter Configuration →  IPv6 NAT

→ Networking support → Networking options → Network packet filtering framework (Netfilter) →    Ethernet Bridge nf_tables support

→ Networking support → Networking options → Network packet filtering framework (Netfilter) →    Ethernet Bridge tables (ebtables) support

→ Networking support → [ ]   Wireless  ----

→ Networking support → < >   WiMAX Wireless Broadband support  ----

→ Networking support → < >   RF switch subsystem support  --->

→ Networking support → < >   Bluetooth subsystem support  ---

→ Networking support → < >   CAN bus subsystem support  ----

→ Networking support → < >   IrDA (infrared) subsystem support  ----

→ Networking support → < >   CAIF support  ----

→ Networking support → < >   NFC subsystem support  ----

→ Device Drivers → Network device support → Ethernet driver support → < > ALL

→ Device Drivers → Network device support → Ethernet driver support →  Intel ...

→ Device Drivers → Network device support → Ethernet driver support →  Intel(R) 82575/82576 PCI-Express Gigabit Ethernet support

→ Device Drivers → Network device support → < >   FDDI driver support

→ Device Drivers → Network device support → < >   PLIP (parallel port) support

→ Device Drivers → Network device support → [ ]   Wireless LAN  ----

→ Device Drivers → Network device support → < >   IEEE 802.15.4 drivers  ----

→ Device Drivers → Network device support → [ ]   ISDN support  ----

 → Device Drivers → < > Multimedia support  ----

→ Device Drivers → Sound card support →    Advanced Linux Sound Architecture  --->

→ Device Drivers → USB support →      xHCI HCD (USB 3.0) support

→ Device Drivers → USB support →      EHCI HCD (USB 2.0) support

→ Device Drivers →   VFIO Non-Privileged userspace driver framework

→ Device Drivers → [*] IOMMU Hardware Support  --->

另外附有同為 P503 電腦 Po-Ming 老師所設定的 config 檔:
點此下載

c. 開始跑編譯 (於 /usr/src/linux 目錄下)
time make-kpkg --initra --revision=1.0.1.versionName kernel_image -j 8

d. 編完後,安裝核心 (於 /usr/src 目錄下)
cd /usr/src
dpkg -i linux-image-3.14.34*.deb

e. 重新開機,並選用新核心開啟
reboot

f. 編完以後可以查看:

核心容量大小 vmlinuz, initrd :
du -sh /lib/modules/*

模組容量大小modules :
du -sh /boot/*

二、其他相關補充

於同一個核心下,想要修改選單參數,可以只編模組,編完再丟到 /lib/modules/3.14.34/ 目錄下,編譯指令如下:
time make modules -j 8











Reference:
http://pominglee.blogspot.tw/p/linux_9.html