<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>程式設計 遇上 小提琴 &#187; Linux</title>
	<atom:link href="http://blog.ez2learn.com/category/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.ez2learn.com</link>
	<description>Victor&#039;s個人部落格，關於程式設計與小提琴</description>
	<lastBuildDate>Tue, 07 Feb 2012 03:26:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>常見的Linux暴炸原因</title>
		<link>http://blog.ez2learn.com/2011/07/15/usual-linux-down-reason/</link>
		<comments>http://blog.ez2learn.com/2011/07/15/usual-linux-down-reason/#comments</comments>
		<pubDate>Fri, 15 Jul 2011 14:10:56 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[中文文章]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[塞暴]]></category>
		<category><![CDATA[大量連線]]></category>
		<category><![CDATA[crash]]></category>
		<category><![CDATA[網站]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=1484</guid>
		<description><![CDATA[今天看大家在搶COSCUP報名，報名頁面一如往年掛掉了，以我自己的經驗看來這樣等級的流量樣打掛Nginx應該還有很大的距離，我自己處理過Now.in在運行中遇過無數各種奇奇怪怪的問題，所以很多常見的Linux暴炸原因都見怪不怪了，對於上千等級連線的伺服器這些是很常遇到的事，如果沒有弄好的話很容易就整個Linux卡住或炸掉，以下介紹一些我所知道Linux會被塞暴的主要原因，都是參數沒設好為主 最大檔案數沒設好 我想這是最多常犯的錯，當然我也犯過，linux預設每個user可以開1024個檔案，嚴格來說是file descriptor，當然socket也算在內，如果這個數字沒有調的話，就算你的Nginx或是什麼鬼伺服器再怎麼威猛，1024這麼少的數字，稍微大一點的流量，都一樣是被塞暴的下場，因為執行伺服器的使用者開不出新的檔案、socket來，而這個問題最常遇到是因為一般情況下你的網站連線數量要達1024不是每天都會發生的，可能發生一下子就沒了，等到哪天真正大流量來時才會發現整個網站暴炸了，但是1024個以上的同時連線數對於目前的now.in伺服器來說隨時都在發生的，所以如果我有哪台伺服器忘記設，很快的就會炸掉 至於要怎樣提高檔案數限制，請參考 Linux Increase The Maximum Number Of Open Files / File Descriptors (FD) ip_conntrack已滿，丟失封包 另一個常見被塞暴的是ip_conntrack，是iptables用來追蹤連線用的表，如果滿起來的話，新進來的封包會被丟掉，你可以在/var/log/message裡看見 Jul 15 19:22:30 hostname kernel: ip_conntrack: table full, dropping packet 這樣的訊息，可以透過修改最大值來解決，參考Linux Iptables ip_conntrack: table full, dropping packet error and solution 或是重開iptables service也可以洗掉目前的table &#8230; <a href="http://blog.ez2learn.com/2011/07/15/usual-linux-down-reason/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>今天看大家在搶COSCUP報名，報名頁面一如往年掛掉了，以我自己的經驗看來這樣等級的流量樣打掛Nginx應該還有很大的距離，我自己處理過Now.in在運行中遇過無數各種奇奇怪怪的問題，所以很多常見的Linux暴炸原因都見怪不怪了，對於上千等級連線的伺服器這些是很常遇到的事，如果沒有弄好的話很容易就整個Linux卡住或炸掉，以下介紹一些我所知道Linux會被塞暴的主要原因，都是參數沒設好為主</p>
<h2>最大檔案數沒設好</h2>
<p>我想這是最多常犯的錯，當然我也犯過，linux預設每個user可以開1024個檔案，嚴格來說是file descriptor，當然socket也算在內，如果這個數字沒有調的話，就算你的Nginx或是什麼鬼伺服器再怎麼威猛，1024這麼少的數字，稍微大一點的流量，都一樣是被塞暴的下場，因為執行伺服器的使用者開不出新的檔案、socket來，而這個問題最常遇到是因為一般情況下你的網站連線數量要達1024不是每天都會發生的，可能發生一下子就沒了，等到哪天真正大流量來時才會發現整個網站暴炸了，但是1024個以上的同時連線數對於目前的now.in伺服器來說隨時都在發生的，所以如果我有哪台伺服器忘記設，很快的就會炸掉</p>
<p>至於要怎樣提高檔案數限制，請參考 <a href="http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/">Linux Increase The Maximum Number Of Open Files / File Descriptors (FD)</a></p>
<h2>ip_conntrack已滿，丟失封包</h2>
<p>另一個常見被塞暴的是ip_conntrack，是iptables用來追蹤連線用的表，如果滿起來的話，新進來的封包會被丟掉，你可以在/var/log/message裡看見</p>
<blockquote><p>Jul 15 19:22:30 hostname kernel: ip_conntrack: table full, dropping packet</p></blockquote>
<p>這樣的訊息，可以透過修改最大值來解決，參考<a href="http://www.cyberciti.biz/faq/ip_conntrack-table-ful-dropping-packet-error/">Linux Iptables ip_conntrack: table full, dropping packet error and solution</a></p>
<p>或是重開iptables service也可以洗掉目前的table</p>
<blockquote><p>service iptables restart</p></blockquote>
<h2>記憶體用盡<span class="Apple-style-span" style="font-size: 16px; color: #444444; line-height: 24px;"> </span></h2>
<p>另一種常見的情況是記憶體用滿了，通常是由長期執行的程序引起的，因為要多餘的記憶體都只能從硬碟瘋狂swap分頁檔，因此整個系統的速度會慢到暴炸，有種快要卡住的感覺，如有這種情況檢查看看是否是記憶體被吃滿了，有些程序天生跑久了就會吃很多記憶體，像那種最好設crontab去定期重開</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2011/07/15/usual-linux-down-reason/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A tool for applying iptables safely: apply_firewall.</title>
		<link>http://blog.ez2learn.com/2010/08/26/a-tool-for-applying-iptables-safely-apply_firewall/</link>
		<comments>http://blog.ez2learn.com/2010/08/26/a-tool-for-applying-iptables-safely-apply_firewall/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 10:39:11 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[English Articles]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[administration]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[tool]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=1091</guid>
		<description><![CDATA[Have you ever done something stupid with iptables command which like blocking you self from accessing the SSH?  Yes, I have.  Most of administrator knows that is dangerous to change iptable rules remotely, with a little typo, you might have &#8230; <a href="http://blog.ez2learn.com/2010/08/26/a-tool-for-applying-iptables-safely-apply_firewall/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Have you ever done something stupid with iptables command which like blocking you self from accessing the SSH?  Yes, I have.  Most of administrator knows that is dangerous to change iptable rules remotely, with a little typo, you might have to restart the machine to access the SSH again.  For applying iptables sfaely, I wrote a simple tool which can be used to apply firewall rules safely.  It backups the original iptables configuration before applying it, and if you don&#8217;t type "yes" within specific time period, it will rollback to original iptables automatically.  Here is an example:</p>
<p><a href="http://blog.ez2learn.com/wp-content/uploads/2010/08/apply_firewall.png"><img class="alignnone size-full wp-image-1092" title="apply_firewall" src="http://blog.ez2learn.com/wp-content/uploads/2010/08/apply_firewall.png" alt="" width="453" height="231" /></a></p>
<p>It is written in Python, you can install it by</p>
<blockquote><p>easy_install apply_firewall</p></blockquote>
<p>Or you can download it here:</p>
<p><a href="http://pypi.python.org/pypi/apply_firewall/">http://pypi.python.org/pypi/apply_firewall/</a></p>
<p>I hope this could be helpful for linux administrators :D</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2010/08/26/a-tool-for-applying-iptables-safely-apply_firewall/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>製作Linux USB live開機隨身碟</title>
		<link>http://blog.ez2learn.com/2008/10/28/make-usb-live-linux-steps/</link>
		<comments>http://blog.ez2learn.com/2008/10/28/make-usb-live-linux-steps/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 08:43:16 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[中文文章]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[夭壽]]></category>
		<category><![CDATA[作業]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=223</guid>
		<description><![CDATA[天殺的OS作業: 製作Linux USB live開機隨身碟這個作業，是要將Linux的Kernel塞到USB裡面Live開機，因為實在太麻煩了，我不得不記錄步驟，否則連我自己都會忘記 使用VirtualBox模擬Debian來編譯Linux kernel 我一直不知道Linux要怎樣編譯，想說在Windows下編出來的是.exe，不是很奇怪嗎? 應該不可能，看了一些文件後才知道是用Linux來編Linux 老樣子，特地灌一個Linux OS然後用它來編譯Linux kernel，那我的其它事情就不用做了，當然還是使用Virtual Box最方便，我使用VirtualBox之前灌好的Debian，來進行編譯Linux kernel的工作 話說編譯核心的教學還真不少，可是很多都已經過時，不然就是好像不盡相同的感覺，最後我按照 http://www.cyberciti.biz/tips/compiling-linux-kernel-26.html 步驟進行 下載Kernel 花了我不少時間，接著解壓縮，真不愧是一個OS，光解壓縮就解了好久，還真不少檔案，光是解壓縮也是很麻煩的事，我老是記不是tar後面要接什麼鬼參數，每次都要上網查 缺了重要的角色 : gcc 接著，要compile發現沒有gcc，我以為那麼常用，一開始就有安裝好，但是不幸的是Debian並沒有一開始就安裝gcc，因此開始安裝gcc的艱難旅途 首先使用apt-get install gcc指令想安裝gcc可是卻失敗，它顯示我沒有權限，改用sudo apt-get install gcc 它又說 "victor is not in the sudoers file"，原來我還得用visudo去把我的帳號加進sudoer file才給我用sudo指，但是看起來很麻煩就放棄了，還好後來後來發現可以用su進入root 使用這些東西時永遠都有驚喜 當我用su root成功執行apt-get &#8230; <a href="http://blog.ez2learn.com/2008/10/28/make-usb-live-linux-steps/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2>天殺的OS作業: 製作Linux USB</h2>
<p>live開機隨身碟這個作業，是要將Linux的Kernel塞到USB裡面Live開機，因為實在太麻煩了，我不得不記錄步驟，否則連我自己都會忘記</p>
<p><span id="more-223"></span></p>
<h2>使用VirtualBox模擬Debian來編譯Linux kernel</h2>
<p>我一直不知道Linux要怎樣編譯，想說在Windows下編出來的是.exe，不是很奇怪嗎? 應該不可能，看了一些文件後才知道是用Linux來編Linux</p>
<p>老樣子，特地灌一個Linux OS然後用它來編譯Linux kernel，那我的其它事情就不用做了，當然還是使用Virtual Box最方便，我使用VirtualBox之前灌好的Debian，來進行編譯Linux kernel的工作</p>
<p>話說編譯核心的教學還真不少，可是很多都已經過時，不然就是好像不盡相同的感覺，最後我按照</p>
<p><a href="http://www.cyberciti.biz/tips/compiling-linux-kernel-26.html">http://www.cyberciti.biz/tips/compiling-linux-kernel-26.html</a></p>
<p>步驟進行</p>
<p>下載Kernel 花了我不少時間，接著解壓縮，真不愧是一個OS，光解壓縮就解了好久，還真不少檔案，光是解壓縮也是很麻煩的事，我老是記不是tar後面要接什麼鬼參數，每次都要上網查</p>
<h2>缺了重要的角色 : gcc</h2>
<p>接著，要compile發現沒有gcc，我以為那麼常用，一開始就有安裝好，但是不幸的是Debian並沒有一開始就安裝gcc，因此開始安裝gcc的艱難旅途</p>
<p>首先使用apt-get install gcc指令想安裝gcc可是卻失敗，它顯示我沒有權限，改用sudo apt-get install gcc 它又說 "victor is not in the sudoers file"，原來我還得用visudo去把我的帳號加進sudoer file才給我用sudo指，但是看起來很麻煩就放棄了，還好後來後來發現可以用su進入root</p>
<h2>使用這些東西時永遠都有驚喜</h2>
<p>當我用su root成功執行apt-get install gcc之後&#8230; 它居然要我插入Debian的CD，歐! shit! 從我開始想compile Linux的kernel以來每一個步驟都有驚喜，我不明白為什麼apt-get不是從網路下載gcc而是要我插入光碟</p>
<p>後來想想，算了，它要插就給它插個爽吧，反正是模擬出來的 ISO送進去就好，終於，耶~ gcc裝好了 終於到了開始compile的時候</p>
<h2>事情永遠沒有你想的這麼簡單</h2>
<p>make指令一下&#8230; 出現一堆錯誤 它居然說stderr未定義，這就表示c的函式庫根本沒有被安裝 囧</p>
<p><a href="http://www.wretch.cc/blog/griffey/8316907">http://www.wretch.cc/blog/griffey/8316907</a></p>
<p>此時發現了救星 原來c的函式庫還要另外安裝，要安裝build-essential才有c的函式庫~ 老天阿 鬼知道要裝這個，囧，make能跑天已經黑一半了!</p>
<h2>開始make</h2>
<p>我試了各種xxxconfig，都失敗，它們似乎都要另外裝一堆東西才能執行，最後我發現make menuconfig需要裝ncurses就可以執行，於是就裝了ncurses，我完全沒有興趣知道那是什麼鬼東西</p>
<p>終於，make menuconfig完成了，妖獸! 好多選項 我也不知道我要怎樣的linux 就隨便吧，預設值先跑跑看，後來感謝doomleika說要勾ext2後來才能boot，我就勾了ext2重編了一次</p>
<p>以下是我make的指令:</p>
<blockquote><p>make menuconfig<br />
make bzImage<br />
make modules<br />
make modules_install</p></blockquote>
<p>接著還需要initrd.img，好像是載入驅動用的影像檔，使用mkinitrd來產生那個影像檔，mkinitrd也要另外安裝，原本我沒有執行make modules_install就去跑mkintrd，mkinitrd某個特定版本時就說找不到那些版本的東西，因此該版本的modules要install完成才能正確地執行mkinitrd</p>
<blockquote><p>apt-get install initrd-tools<br />
mkinitrd -o initrd.img 2.6.22.2</p></blockquote>
<h2>格式化USB</h2>
<p>還好VirtualBox提供了將USB裝置虛擬到OS的功能，所以我在虛擬OS裡就可以格式化USB，還有執行grub等等的動作</p>
<p>首先用fdisk指令將USB清掉，接著用mkfm.ext2格式話成ext2的檔案格式，然後，用指令</p>
<blockquote><p>grub-install &#8211;no-floppy &#8211;root-directory=/mnt /dev/sda</p></blockquote>
<p>將grub裝到usb中，接著建立一個檔案放在/boost/grub/menu.lst，內容為</p>
<blockquote><p>default 0<br />
timeout 10</p>
<p>title Victor&#8217;s USB Live Linux<br />
root (hd0,0)<br />
kernel /boot/linux.img-2.6.22.2<br />
initrd /boot/initrd.img-2.6.22.2</p></blockquote>
<p>接著用</p>
<blockquote><p>grub&gt;</p>
<p>device (hd0) /dev/sda<br />
root (hd0,0)<br />
setup (hd0)<br />
quit</p></blockquote>
<h2>將grub燒入到USB的MBR中</h2>
<p>在這之中我一直弄錯，問題出在全部用/dev/sda來下指令，包括mkfs.ext2之類的，沒注意到/dev/sda1後面要加一才是磁區1，因為一直破壞到檔案系統，接下來的步驟當然也全部都失敗</p>
<div id="attachment_287" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.ez2learn.com/wp-content/uploads/2008/10/screenshot.png"><img class="size-medium wp-image-287" title="找不到/dev/console" src="http://blog.ez2learn.com/wp-content/uploads/2008/10/screenshot-300x225.png" alt="找不到/dev/console" width="300" height="225" /></a><p class="wp-caption-text">找不到/dev/console</p></div>
<p>終於! 成功地開機，載入了linux，但在開機的過程中說找不到/dev/console，搞了半天，原來還要建一些設備</p>
<p><a href="http://tw.msnusers.com/Linuxstepbystep/floppy.msnw">http://tw.msnusers.com/Linuxstepbystep/floppy.msnw</a></p>
<p>參考這裡，接著開機的錯誤只剩找不到/sbin/init，似乎是開機完會執行那個玩意兒</p>
<p>好像busybox就有那樣的東西，因此我就來編譯busybox，可是編譯失敗，它說沒有inotify_init，我也不知道為什麼，最後用make menuconfig把它diable掉就編譯成功了</p>
<p>把busybox接著把_install下的所有東西copy到USB上</p>
<blockquote><p>cp -r * /mnt</p></blockquote>
<p>接著再開機試試</p>
<blockquote><p>qemu /dev/sda</p></blockquote>
<p>很神奇對吧，qemu也是一款模擬器，所以這就是模擬器中的模擬器!</p>
<p>終於! 可以開機了&#8230;但是它不停跟我抱怨找不到tty2, tty3&#8230;</p>
<p>看來好像是tty之前建的不夠，tty到底是什麼鬼我也不知道= = 他想要就給他吧</p>
<p>參照</p>
<p><a href="http://www.faqs.org/docs/pocket_linux/x1252.html">http://www.faqs.org/docs/pocket_linux/x1252.html</a></p>
<p><a href="http://www.xs4all.nl/~lennartb/rescuedisk/node7.html">http://www.xs4all.nl/~lennartb/rescuedisk/node7.html</a></p>
<p>一口氣建好其它tty給他，最後! 吃飽喝足的Linux終於成功地開機起來了</p>
<div id="attachment_288" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.ez2learn.com/wp-content/uploads/2008/10/screenshot-1.png"><img class="size-medium wp-image-288" title="終於！成功的開機到Busybox的Shell" src="http://blog.ez2learn.com/wp-content/uploads/2008/10/screenshot-1-300x225.png" alt="終於！成功的開機到Busybox的Shell" width="300" height="225" /></a><p class="wp-caption-text">終於！成功的開機到Busybox的Shell</p></div>
<div id="attachment_289" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.ez2learn.com/wp-content/uploads/2008/10/screenshot-2.png"><img class="size-medium wp-image-289" title="執行ls的畫面" src="http://blog.ez2learn.com/wp-content/uploads/2008/10/screenshot-2-300x225.png" alt="執行ls的畫面" width="300" height="225" /></a><p class="wp-caption-text">執行ls的畫面</p></div>
<p>Windows的VirtualBox模擬出來的Debian中的Linux，模擬器中的模擬器，有趣吧!</p>
<div id="attachment_295" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.ez2learn.com/wp-content/uploads/2008/10/windows-linux-linux.png"><img class="size-medium wp-image-295" title="Windows模擬的Linux模擬的Linux" src="http://blog.ez2learn.com/wp-content/uploads/2008/10/windows-linux-linux-300x187.png" alt="Windows模擬的Linux模擬的Linux" width="300" height="187" /></a><p class="wp-caption-text">Windows模擬的Linux模擬的Linux</p></div>
<h2>結論</h2>
<p>從頭到尾，我不知道查了多少文件，半夜弄到了幾點，其中每個步驟都有驚喜，每個步驟都不是你想像中的那樣簡單，查文件次數/步驟 應該到了一個驚人的數字，WTF Per Minutes更是不用說已經破表了，我只能說</p>
<blockquote><p><span style="font-size: xx-large;">陽壽不足，請勿在家嘗試，Victor關心您</span></p></blockquote>
<p>網路上能找到的文章，大多不是已經過時，不然就缺掉很多重要的步驟，不然就是用的工具或手法不大相同，大多數都是將ISO或是現成的Live CD或USB工具塞到USB中的教學，要從頭到尾由Kernel編譯起來到塞到USB中，會嘔出幾兩血是正常的，總結以上的心得，有幾大步驟</p>
<ol>
<li>準備編譯環境</li>
<li>編譯核心以及模組，並且放置到boot中</li>
<li>格式化</li>
<li>設置boot loader，寫入MBR</li>
<li>建置資料夾、以及設備，以及放置核心影像檔</li>
<li>安裝BusyBox等工具</li>
</ol>
<p>事實上每個大步驟都可以拆成一篇文章來講，還有很多東西事實上我還是搞不懂它在幹麻的，像tty到底是什麼鬼設備我現在還是搞不清楚，不過，至少開機成功了，有閒的話，我重新製作一次，然後把每個大步驟獨立成一篇文章來講好了:P</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2008/10/28/make-usb-live-linux-steps/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

