2009年9月1日 星期二

利用較新的主機來編譯核心給伺服器用

通常編核心都會在原本主機做,但若主機太慢不就等很久。雖然就現況看編核心比較少這樣做。不過咧,編譯一個精簡的核心給伺服器用是種最佳劃的方式。雖然現在主機設備比以往好太多。

準備個隨身碟,容量起碼可以放核心原始碼。在下準備個1G的隨身碟,然後格式化成ext3。
抓個kernel檔解壓到隨身碟中,然後編譯。以下是在較快的主機上頭做的部份。

mkfs.ext3 /dev/sda1
mount /dev/sda1 /usr/src
cd /usr/src
tar jxf linux-2.6.xx.tar.bz2
cd linux-2.6.xx
make menuconfig
make

編譯好後就可以把隨身碟裝到伺服器上再做以下部份

mount /dev/sda1 /usr/src
cd /usr/src/linux-2.6.xx
make;make install;make modules_install

如此僅需做編譯的最後步驟大約等待3分鐘(以在下的P3-800)就可以把核心裝好,這樣可以節約很多時間

2009年8月31日 星期一

為自己的Linux做備份順便做個整理

備份前準備個隨身硬碟,至少比系統碟大就行。

然後拿出可以光碟開機的LINUX系統。

利用LINUX光碟開機,開機後記得掛載(mount)系統碟跟隨身硬碟(註:有格式化成ext3檔案系統)
且利用CP命令如下所示:
cp -fpR /mnt/hd1 /mnt/hd2

若要顯示訊息請加v
之後等待漫長等待。

完成後可以順道把系統碟的資料全部刪除。
然後再做一次複製
cp -fpR /mnt/hd2 /mnt/hd1

這是相當於硬碟重整啦。

附帶:這個隨身硬碟帶到哪都可以複製成linux,只要記得帶開機光碟。畢竟有時遇到的主機並不支援usb開機

2009年6月24日 星期三

可以刪除一堆相同文字的script


#!/bin/sh
checkCode="E486:"
for x in `ls | gawk -F. '{print $1}'`
do
echo -n "Run...."
y=$x.html
runCode="`ex $y +/要刪的文字行-c q | gawk '/E486/{ print $1 }'`"
while [ "$checkCode" != "$runCode" ]
do
runCode="`ex $y +g/要刪的文字行/d -c wq | gawk '/E486/{ print $1 }'`"
echo -n "."
done
echo "Fin"
done
rm *.html~



說明:利用ex行編輯器來作修改文字動作
這是把所有在目錄下的檔案開起並將有所要刪的文字該行刪除,
首先找所要的文字:+g/要刪的文字行,前頭的g表是群組
然後就是動作設定:/d <--刪除
第二個動作就是存檔:-c wq
接下來利用串流把錯誤訊息過濾出來,這邊我用gawk
其錯誤字面段為 E486
gawk '/E486/{ print $1 }
然後比對是否發生錯誤,最後就完成檔案的修改

2009年5月9日 星期六

關於kqemu對上2.6.29的核心版本

在編譯kqemu發生缺少include檔
少了在linux kernel中的include/linux/bounds.h

很頭暈的思考,怎麼會少咧。正好手上還有舊版核心2.6.28.2,進去找了一下,居然有耶!

總之先複制到2.6.29下的include/linux先完成編譯再說。
幸好編譯總算成功

看來太新版的核心得自己想些辦法,複制舊核心的檔補缺檔或者改kqemu的源始碼

基本上自行編譯套件多少都會發生,只是第一次遇上核心剛好少了include檔。
這得好好的研究一下

2009年5月8日 星期五

自家的Samba Serve設定

在slackware 中設定檔是放在/etc/samba/smb.conf

[global]
# 定義工作群組
workgroup = MSHOME
# 定義給M$ 文字集的形式,一般使用繁體字都用cp950
dos charset = cp950
# 定義給UNIX的文字集形式,用utf8 字集只有方便啦
unix charset = utf8
# 設定netbios主機的別名
netbios aliases = 嘿嘿
server string = 嘿嘿
interfaces = 192.168.0.0/24
log file = /var/log/samba/samba.%m
max log size = 50
security = user
load printers = no
dns proxy = no
ldap ssl = no
hosts allow = 192.168.0.0/24,127.0.0.1
unix password sync = yes
passwd program = /usr/bin/passwd %u

[home]
read only = no
path = %H

[The DVD-ROM]
browsable = yes
read only = yes
path = /mnt/cdrom
root preexec = /sbin/mount -t iso9660 -o iocharset=utf8 /dev/hdc /mnt/cdrom
root preexec = /sbin/umount /dev/hdc /mnt/cdrom


方便好用的Samba就這麼設好了
把服務起動
先把/etc/rc.d/rc.samba改成執行裝態
然後執行/etc/rc.d/rc.samba start即可

剛換CPU於試用時發生CPU溫度問題

在下的工作機剛換成 P4 2.8G,於編譯套件的時後發生,正確來講是編譯qemu。

剛開始時CPU工作溫度算正常39度多,直到主機很熱情的告知( beep 的叫)時用sensors來查看,
恩到達60度,天啊就算在下仍延用P4 2.4G 的CPU風扇也不會差這麼多吧!?

還是qemu比較耗費CPU運算??因為編核心也才在48度上下,都是開在文字模式下跑的有差嗎?

等過陣子買cpu風扇來換試

2009年5月2日 星期六

長年的使用Slackware這個distribution小小心路歷程

其實從高三開使就跟slackware結下不解之緣,在高二時代剛好是m$賣了一年多windows95。那時slackware為3.0

一次在書攤上看到一本名為Linux的奧秘(松格)才開始linux之旅。雖然其kernel是早期的1.2.x的版本,算是一個令人艱辛的版本。必竟得先打造好符合硬體的開機kernel,而且不能太大,超過1.4MB就是會發生開不了機的怪事。

其實那時在下非常無知,為了裝好kernel硬是失敗多次,加上後面要弄上X window硬是把slackware重裝N次。因為不會從磁片開機修改。當然也算是個非常好的經驗啦,搞懂如何編譯核心並且依照符合的硬體編譯,過了這一段挺長的時間大約三個月左右,才從編譯失敗解脫。還好算有經過這段時期,對於之後的核心我仍採自行編譯,當然也採用module(模組化)。

事實上也是因為剛好裡頭附有doom的遊戲啦,可以說是為了玩遊戲才裝:p

事後也過沒多久就很無奈的把電腦重裝,因為Linux可沒word用啊

之後過兩年在次在書攤上看到有關linux的書輯 Linux實務手冊98版(第三波) 裡頭一共三套distribution 分別是slackware 3.4跟redhat 5.0還有 debian 1.3.1r6,當然也都分別裝過最後還是繼續使用slackware,可能是因為習慣吧。最讓我感動的是終於有中文化的套件,更感動的是在下的yamaha 742便宜音效卡kernel有支援。

但熱情總是無法持久,大概是因為沒有太多遊戲可玩,就算想玩也很難用dosemu,基本上也頂多支持三周左右。

之後裝成雙系統也就比較好一點,只是為了練習C語言真是讓人汗言

這個情況直到專三之後比較好了,因為支援的電腦硬體跟軟體越多了,此時在下也把slackware7.0給換上8.1。套件編譯的功力也有所提高,slackware很多套件可沒redhat方便用rpm,大多得下載source code回來編譯。當然對於編譯前的readme或install文件是必看必讀,不然有些是編不出來的。當然有了./configure也是挺方便的,當然如果不加參數簡單啊,一但用上參數就得好好的看文件說明。

之後退伍很決心的把slackware9.0裝成單一系統,也就是純linux沒有多重系統更沒有m$

至今12.2出來了,而在下仍使用slackware12.0並且分裝兩臺主機,一臺當分享器+防火牆,一臺就是常用的家用電腦當然上頭很多都是slackware沒有附加的套件,如mplayer,amule,xw lib,....etc。連kernel也自行下載重編2.6.29的版本。

用slackware的套件久了,也不太想用其他distribution,附帶在下可沒去考Linux認證,那認證可不是我這英文差到極點可以去的,加上專業度要夠,在下這人又不太會死背,在下只會翻書查閱。考場上可沒時間翻書讓你查command就算給你man查可能就time over

slackware在學習門檻上是有那麼點高,不過一但撐下去後樂趣就更多了,就算要大動手腳也非常的方便,在UNIX概念上也更好

很悠閒的整理一下裝mplayer所要的套件

A52Codec http://trac.cod3r.com/a52codec or http://liba52.sourceforge.net/downloads.html
FLAC http://flac.sourceforge.net/download.html
The LAME http://lame.sourceforge.net/index.php
for APE http://supermmx.org/resources/linux/mac/mac-3.99-u4-b5.tar.gz
其他的媒體 http://www.moviecodec.com 及 http://www.linuxfromscratch.org/blfs/view/stable/multimedia/libdriv.html
ffmpeg http://ffmpeg.mplayerhq.hu/
mplayer http://www.mplayerhq.hu/design7/news.html

2009年4月11日 星期六

利用cdrecord燒iso檔

圖形界面雖然方便但確實有時及不可耐,當沒有Xwindow時咱們也能燒燒iso
利用 cdrecord命令就能在文字模式下愛怎燒就怎燒

正常燒錄的指令
cdrecord -v speed=8 dev=0,0,0 driveropts=burnfree fs=32m -dao xxxx.iso
speed=8 <-- 表燒錄的速度
dev=0,0,0 <--- 表選用的燒錄裝製
driveropts=burnfree <-- 開起緩衝模式
fs=8m <--- 緩衝區大小

要清空後燒錄則可用下列
cdrecord -v blank=fast speed=8 dev=0,0,0 driveropts=burnfree fs=32m -dao xxxx.iso
blank=fast <-- 快速清除

2009年3月20日 星期五

tarball懶人包安裝法

tarball的方式確時另人望之卻步
因為得千里尋套件,無法解決相依問題
但可以為此些scripts來做安裝
當然相依性問題得由編譯的過程中自行解決

首先做一針對套件的解壓到安裝的script
按套件名為名稱
如libdv-1.0.0.tar.gz
而script就命名為 libdv.Build

#!/bin/sh
CWD=$(pwd)
TMP=${TMP:-/tmp}
if [ ! -d $TMP ]; then
mkdir -p $TMP
fi
PKG=$TMP/package-libdv
PKGNAME=libdv <-套件名這邊
VERSION=1.0.0 <-版本名這邊

if [ "$ARCH" = "i386" ]; then
SLKCFLAGS="-O2 -march=i386 -mcpu=i686"
elif [ "$ARCH" = "i486" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
elif [ "$ARCH" = "s390" ]; then
SLKCFLAGS="-O2"
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2"
fi

rm -rf $PKG
mkdir -p $PKG/usr
cd $TMP
rm -rf $PKGNAME-$VERSION
tar xzvf $CWD/$PKGNAME-$VERSION.tar.gz || exit 1 <-- 解壓縮這邊
cd $PKGNAME-$VERSION

chown -R root:root .
find . -perm 664 -exec chmod 644 {} \;
find . -perm 600 -exec chmod 644 {} \;
find . -perm 444 -exec chmod 644 {} \;
find . -perm 400 -exec chmod 644 {} \;
find . -perm 440 -exec chmod 644 {} \;
find . -perm 777 -exec chmod 755 {} \;
find . -perm 775 -exec chmod 755 {} \;
find . -perm 511 -exec chmod 755 {} \;
find . -perm 711 -exec chmod 755 {} \;
find . -perm 555 -exec chmod 755 {} \;

#以下是使用./configure的設定參數,請依照./configure --help的說明設定
CFLAGS="$SLKCFLAGS" \
./configure \
--prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var

make || exit 1
make install || exit 1

以後只要遇到新版本就可以直接改版本號就可以無痛的安裝
最後就是再寫個script來負責處理相依性
例如mplayer需要ffmpg但ffmpg還要一堆如多媒體相關的程式庫,就用個script來做全編譯
#!/bin/sh
./a52.Build
./ffmpeg.Build
./mplayer.Build

當有找到新的套件只需執行本script就搞定啦

最近把server的iptables整理

#!/bin/sh

IPTABLES="/usr/sbin/iptable"

echo "Start firware configure..."
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo 2048 > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 255 > /proc/sys/net/ipv4/ip_default_ttl
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 65535 > /proc/sys/net/ipv4/netfilter/ip_conntrack_max
echo 10000 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
echo 120 > /proc/sys/net/ipv4/netfilter/ip_conntrack_udp_timeout
#/sbin/modprobe nf_nat
#/sbin/modprobe nf_nat_pptp
#/sbin/modprobe nf_conntrack
#/sbin/modprobe nf_conntrack_ftp
#/sbin/modprobe nf_conntrack_irc
#/sbin/modprobe iptable_filter
#/sbin/modprobe iptable_mangle
#/sbin/modprobe iptable_nat
/usr/sbin/pppoe-stop
echo "Start PPPoe..."
/usr/sbin/pppoe-start
PPPOEIP=`ifconfig | grep P-t-P | awk -F : '{print $2}' | awk '{print $1}'`
echo $PPPOEIP
echo "Start Firware ..."
echo "Initiatig iptables.."
/usr/sbin/iptables -P INPUT ACCEPT
/usr/sbin/iptables -P OUTPUT ACCEPT
/usr/sbin/iptables -P FORWARD ACCEPT
/usr/sbin/iptables -t filter -F
/usr/sbin/iptables -t nat -F
/usr/sbin/iptables -t filter -X
/usr/sbin/iptables -t nat -X
echo "ok"

echo "Getting the DShield Block List...."
BADIPS="$BADIPS `lynx --dump http://feeds.dshield.org/block.txt | awk '/^[1-9]/ {print $1 "/" $3}'`"
echo "ok"

echo "Setting rules..."
/usr/sbin/iptables -P INPUT DROP
/usr/sbin/iptables -P OUTPUT DROP
/usr/sbin/iptables -P FORWARD DROP

/usr/sbin/iptables -A INPUT -i lo -j ACCEPT
/usr/sbin/iptables -A OUTPUT -o lo -j ACCEPT
/usr/sbin/iptables -A INPUT -i ! lo -s 10.0.0.0/8 -j DROP
/usr/sbin/iptables -A OUTPUT -o ! lo -s 10.0.0.0/8 -j DROP
/usr/sbin/iptables -A INPUT -s 127.16.0.0/12 -j DROP
/usr/sbin/iptables -A OUTPUT -d 127.16.0.0/12 -j DROP
/usr/sbin/iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
/usr/sbin/iptables -A OUTPUT -d 192.168.0.0/24 -j ACCEPT

/usr/sbin/iptables -N BADPKT
/usr/sbin/iptables -A BADPKT -j LOG --log-prefix " ** Firewall DROP ** "
/usr/sbin/iptables -A BADPKT -j DROP

/usr/sbin/iptables -N BADFOR
/usr/sbin/iptables -A BADFOR -j LOG --log-prefix "**Firewall DROP is Forward**"
/usr/sbin/iptables -A BADFOR -j DROP

/usr/sbin/iptables -N BADIP
/usr/sbin/iptables -A BADIP -j LOG --log-prefix "**Firewall DROP is IP**"
/usr/sbin/iptables -A BADIP -j DROP

/usr/sbin/iptables -A INPUT -p icmp -m icmp --icmp-type 3 -j BADPKT
/usr/sbin/iptables -A INPUT -p tcp ! --syn -m state --state NEW -j BADPKT
/usr/sbin/iptables -A INPUT -p tcp --tcp-flags ALL NONE -j BADPKT
/usr/sbin/iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j BADPKT
/usr/sbin/iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j BADPKT
/usr/sbin/iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j BADPKT
/usr/sbin/iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j BADPKT
/usr/sbin/iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j BADPKT
/usr/sbin/iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j BADPKT
/usr/sbin/iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j BADPKT
/usr/sbin/iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j BADPKT
/usr/sbin/iptables -A INPUT -p tcp --tcp-flags ALL ALL -j BADPKT
/usr/sbin/iptables -A INPUT -p tcp --tcp-flags ALL FIN -j BADPKT

/usr/sbin/iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j BADPKT
/usr/sbin/iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j BADPKT
/usr/sbin/iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -j BADPKT
/usr/sbin/iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j BADPKT
/usr/sbin/iptables -A FORWARD -p tcp --tcp-flags FIN,RST FIN,RST -j BADPKT
/usr/sbin/iptables -A FORWARD -p tcp --tcp-flags ACK,FIN FIN -j BADPKT
/usr/sbin/iptables -A FORWARD -p tcp --tcp-flags ACK,URG URG -j BADPKT
/usr/sbin/iptables -A FORWARD -p tcp --tcp-flags ACK,PSH PSH -j BADPKT
/usr/sbin/iptables -A FORWARD -p tcp --tcp-flags ALL FIN,URG,PSH -j BADPKT
/usr/sbin/iptables -A FORWARD -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j BADPKT
/usr/sbin/iptables -A FORWARD -p tcp --tcp-flags ALL ALL -j BADPKT
/usr/sbin/iptables -A FORWARD -p tcp --tcp-flags ALL FIN -j BADPKT

/usr/sbin/iptables -A OUTPUT -p tcp -m state --state NEW --dport 53 -j ACCEPT
/usr/sbin/iptables -A OUTPUT -p tcp -m state --syn --state NEW --dport 80 -j ACCEPT
/usr/sbin/iptables -A INPUT -p tcp --dport 7654
/usr/sbin/iptables -A INPUT -p udp --dport 7765
/usr/sbin/iptables -A INPUT -p udp --dport 7657
/usr/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/usr/sbin/iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

echo "BADIPS Loading ..."
for ip in $BADIPS ; do
/usr/sbin/iptables -A INPUT -s $ip -j BADIP
/usr/sbin/iptables -A FORWARD -s $ip -j BADIP
done
echo "ok"

/usr/sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE
#/usr/sbin/iptables -t nat -A POSTROUTING -o ppp0 -j SNAT --to-source $PPPOEIP

if [ -x /etc/natinit.sh ]; then
. /etc/natinit.sh
fi

/usr/sbin/iptables -A FORWARD -o ppp0 -p tcp -m state --syn --state NEW --dport 80 -j ACCEPT
/usr/sbin/iptables -A FORWARD -i ppp0 -p tcp -m state --syn --state NEW --sport 80 -j ACCEPT
/usr/sbin/iptables -A FORWARD -i ppp0 -p tcp --dport 7654 -j ACCEPT
/usr/sbin/iptables -A FORWARD -i ppp0 -p udp --dport 7765 -j ACCEPT
/usr/sbin/iptables -A FORWARD -i ppp0 -p udp --dport 7657 -j ACCEPT
/usr/sbin/iptables -A FORWARD -i eth0 -o ppp0 -p tcp -m state --syn --state NEW --dport 80 -j ACCEPT
/usr/sbin/iptables -A FORWARD -i eth0 -o ppp0 -p tcp -d 218.240.35.18 -m state --syn --state NEW --dport 80 -j ACCEPT
/usr/sbin/iptables -A FORWARD -i eth0 -o ppp0 -p tcp -d 218.240.35.10 -m state --syn --state NEW --dport 80 -j ACCEPT
/usr/sbin/iptables -A FORWARD -i eth0 -o ppp0 -p tcp -d 218.240.35.18 -m state --syn --state NEW --dport 5308 -j ACCEPT
/usr/sbin/iptables -A FORWARD -i eth0 -o ppp0 -p tcp -d 218.240.35.10 -m state --syn --state NEW --dport 5308 -j ACCEPT
/usr/sbin/iptables -A FORWARD -i eth0 -o ppp0 -p tcp -d 203.70.19.74 -m state --syn --state NEW --dport 5308 -j ACCEPT
/usr/sbin/iptables -A FORWARD -i eth0 -o ppp0 -p tcp -m state --syn --state NEW --dport 5308 -j ACCEPT
/usr/sbin/iptables -A FORWARD -o ppp0 -p udp -m state --state NEW --dport 53 -j ACCEPT
/usr/sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

if [ -x /etc/forward.sh ]; then
. /etc/forward.sh
fi

if [ -x /etc/portdrop.sh ]; then
. /etc/portdrop.sh
fi

# Server can input ports
if [ -x /etc/acceptport.sh ]; then
. /etc/acceptport.sh
fi

# BADPKT ip
if [ -x /etc/drop.sh ]; then
. /etc/drop.sh
fi