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














筆電音量快捷鍵設定


讓筆電可以使用自訂義快捷鍵調音量,例如
Fn + Up
Fn + Down


說明,筆者用的
筆電: Acer V3-772G
系統: Debian Jessie
環境:IceWM
音控:ALSA
Kernel:3.16.7


一、請先確定音效卡已驅動,且音量控制正常

lspci -v

補充,我是手動設定音效裝置的方式:
 vi /etc/asound.conf
pcm.!default {
    type hw
    card 1    
    device 0
  }
  ctl.!default {
    type hw
    card 1 
  }

二、使用 ALSA 確認音效介面編號

alsamixer
F6

如圖所示,我的筆電主音量控制為 Card 1 / Master

三、編寫設定檔


vi /etc/X11/icewm/keys 
(也將 keys 設定檔放到 /homd/USER/.icewm/keys 路徑)
key "XF86AudioLowerVolume"      amixer -c 1 set Master 1%-
key "XF86AudioRaiseVolume"      amixer -c 1 set Master 1%+

設明:
"XF86AudioLowerVolume" 的意思為筆電 Fn + Down 之按鍵代號,反之。
amixer 是音控指令。
-c 1 是 Sound Card 1.
set Master 是控制 ALSA 的 Master 項。
1%+ 是單下按鍵增加總音量 1% (可依需求修改),反之 - 就是減少音量。

四、重啟 IceWM


五、其他應用,例如「截圖」快捷鍵設定

安裝截圖軟體 shutter

apt-get install shutter
vi /etc/X11/icewm/keys
key "Print" shutter -f
key "Alt+Print" shutter -w
key "Ctrl+Print" shutter -s


說明:
shutter -f  截全螢幕
shutter -w  截視窗
shutter -s  截選取區塊





Referencd: