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

2008年4月16日 星期三

使用fluxbox

因為想用個更能减輕Xwindow上的操作
决定使用fluxbox來做
首先把路徑下的.xinitrc改成.xinitrc.kde
這是種備份也是習慣
此时cp /etc/X11/xinit/xinitrc.fluxbox .xinitrc
完成後先startx試試

接著修改
.fluxbox/下的檔案
以及.xinitrc
這邊是改為
export XMODIFIERS="@im=SCIM"
export GTK_IM_MODULE=SCIM
export QT_IM_MODULE=SCIM
export XIMPROGRAM="scim -d"

GSDPID='pidof gnome-sttings-daemon'
if [ "x$GSDPID" == "x" ]; then
/usr/libexec/gnome-settings-daemon &
fi
# Start the window manager:
exec /usr/bin/startfluxbox
如此就可以key中文

2008年4月1日 星期二

使用qemu為了譲Linux可以玩windows的遊戲

經過漫長的實作之後終於可以了

試了很久才發現裝win2000是最佳搭配