2010年11月1日 星期一

CentOS 5.5 編譯核心

CentOS 5.5 的 kernel 版本是 2.6.18, 新版本是 2.6.35.7, 好久沒編譯核心了, 來大展身手一番 (事實證明還差得遠)

編譯好後重開機, 結果不意外 panic, 成堆錯誤訊息, 第一個就搞不懂了

insmod: error inserting '/lib/dm-region-hash.ko': -1 File exists 

這甚麼(尛)? 谷歌一下還真的有解, 方法是解開 initrd-2.6.35.7.img 這個檔

zcat initrd-2.6.35.7.img | cpio -i

然後修改 init

echo “Loading dm-region-hash.ko module”
insmod /lib/dm-region-hash.ko

上面兩行會重複(搞甚麼?竟然會重複?), 把重複的刪掉, 再把檔案壓回去: 先把所有解出來的東西包成一個檔案

find . | cpio -c -o > ../initrd

再壓縮這個檔案

gzip -9 < initrd > initrd-2.6.35.7.img

重開機, 真的沒有原先的錯誤了, 但還有下一個 (尛)?

could not find filesystem '/dev/root'


有人說是沒抓到硬碟, 有人說是 label 有問題, 試過都不行, 最後解法是修改 .config的一個參數


CONFIG_SYSFS_DEPRECATED_V2=Y


就可以了, 看來這個參數是對舊的檔案系統的支援, 原本 CentOS 用的是檔案系統要淘汰的

2010年9月27日 星期一

linux 刪除檔名包含dash - 的檔案

發現要刪除一個檔名有 - 在裡面的檔案, 例如 -123, 刪都刪不掉, 用

rm -123 當然不行, 用

rm /-123 看起來刪掉了, 但其實檔案還在, 最後方法原來是... 要加一點

rm ./-123 就可以了, 但這是什麼道理? 如果要產生檔名包含 -, 也是一樣要加一點. 例如

touch ./-123

2010年9月26日 星期日

linux 檔案加密

Linux 要怎麼把檔案加密呢? 谷歌一下, 有人說用 openssl 就行, (key 是用 dd if=/dev/random of=crypt.key bs=256 count=1 做出來的)

openssl enc -e -bf -k crypt.key -in file -out file.crypt

那我有一堆檔案呢? 總不能全手動吧? 有人結合 tar 的指令, 可是這樣不就產生一個超大的檔案?我只要每個檔案加密就好, 可是要怎麼結合 openssl 指令呢? 因為有兩個地方要有東西, 一個 in, 一個 out, 谷歌好久都沒看到有人這麼做, 不過看到類似的指令就吧它拼起來, 結果像這樣

#!/bin/bash

TAR=/home
find $TAR -type f > cryptfile
find $TAR -type d > dir



for DIR in $(cat dir)
do
mkdir /tmp/$DIR
done


for FILE in $(cat cryptfile)
do
echo $FILE
openssl enc -e -bf -k crypt.key -in $FILE -out /tmp/$FILE.cypt
done

先把要備份的檔案存成一個文字檔 cryptfile, 再來產生個文字檔放目錄, 再來用兩 for 迴圈, 在 /tmp 建一樣的目錄來放加密過的檔案, 就大功告成了. 但是...但是...遇到有空白的目錄或檔名就完蛋了, 因為 for 迴圈是用空白來換行的, 這該如何是好? 該不會要搬出 sed, awk 吧? 谷歌了好久, 終於看到一線曙光, 有人也有相同的問題, 原來用 whlie 就行了, 結果像這樣


#!/bin/sh
TAR=/home
find $TAR -type f > cryptfile
find $TAR -type d > dir


cat dir | while read DIR
do
#echo $DIR
mkdir -p "/tmp/$DIR"
done


cat cryptfile | while read FILE
do
echo $FILE
openssl enc -e -bf -k crypt.key -in "$FILE" -out "/tmp/$FILE.cypt"
done


大功告成, 真是太神奇了, 可是為什麼呢?

2010年9月14日 星期二

Acer T230H 觸控螢幕

Ubuntu 10.04 可以支援觸控螢幕嗎? 有人說可以, 但只限於某些硬體, 那 Acer 出的 T230H 呢? 有人說可以, 那來試試看吧

Linux kernel 版本(uname -a) :
2.6.32-24-generic-pae #42-Ubuntu SMP


Xorg 版本(Xorg -version) :
X.Org X Server 1.7.6
Release Date: 2010-03-17
X Protocol Version 11, Revision 0
Build Operating System: Linux 2.6.24-27-server i686 Ubuntu


裝置名稱 (lsusb) :
Bus 005 Device 002: ID 0408:3000 Quanta Computer, Inc.

裝置明細 (lshal) :
udi = '/org/freedesktop/Hal/devices/usb_device_408_3000_noserial_if0_hiddev'
  hiddev.application_pages = {'Unknown page 0xd0004'} (string list)
  hiddev.device = '/dev/usb/hiddev0'  (string)
  hiddev.product = 'Acer T230H'  (string)
  info.capabilities = {'hiddev'} (string list)
  info.category = 'hiddev'  (string)
  info.parent = '/org/freedesktop/Hal/devices/usb_device_408_3000_noserial_if0'  (string)
  info.product = 'Acer T230H'  (string)
  info.subsystem = 'usb'  (string)
  info.udi = '/org/freedesktop/Hal/devices/usb_device_408_3000_noserial_if0_hiddev'  (string)
  linux.device_file = '/dev/usb/hiddev0'  (string)
  linux.hotplug_type = 2  (0x2)  (int)
  linux.subsystem = 'usb'  (string)
  linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1d.3/usb5/5-1/5-1:1.0/usb/hiddev0'  (string)

這裡我們可以看到 '/dev/usb/hiddev0' 與 'Acer T230H' 這兩個會用到的資訊, 照別人說的建立一個檔案 /etc/udev/rules.d/99-touchscreen.rules

SUBSYSTEM=="usb", ATTRS{idVendor}=="0408", ATTRS{idProduct}=="3000", SYMLINK+="usb/quanta_touch"
SUBSYSTEM=="input", KERNEL=="event*", ATTRS{idVendor}=="0408", ATTRS{idProduct}=="3000", SYMLINK+="input/quanta_touch"

看到 0408 與 3000 跟先前看到的裝置名稱 (lsusb)是一樣的, 看來有機會成功? 這一步會在 /dev/usb 目錄產生一個 link : quanta_touch -> hiddev0 (但不知是否必要, 改天再來試)

最重要的驅動 hidtouch


記得把 hid-device-dump 也抓回來, 都裝起來
dump 一下裝置

hidDeviceDump /dev/usb/quanta_touch 13

這裡 13 是很重要的, 看下圖


每次的觸控都是 13 個東西吐出來, XY座標在第5(10030),6(10031)個欄位, 這裡(X, Y)就是 (1433, 552), 但Acer 的 T230H 是支援兩點的, 因此可以同時吐兩個座標出來

再來就是新增 /etc/X11/xorg.conf 這個檔案了


Section "InputDevice"
 Identifier   "Acer T230H"
 Driver       "hidtouch"
 Option       "SendCoreEvents"     "true"
 Option       "ReportingMode"     "Raw"
 Option       "Device"             "/dev/usb/quanta_touch"
 Option       "PacketCount"       "13"
 Option       "OpcodePressure"     "852034"
 Option       "OpcodeX"           "65584"
 Option       "OpcodeY"           "65585"
 Option       "CalibrationModel"   "1"
 Option       "CornerTopLeftX"     "0"
 Option       "CornerTopLeftY"     "0"
 Option       "CornerTopRightX"   "1920" # 1920 for 23"
 Option       "CornerTopRightY"   "0"
 Option       "CornerBottomLeftX" "0"
 Option       "CornerBottomLeftY" "1080"  # 1080 for 23"
 Option       "CornerBottomRightX" "1920" # 1920 for 23"
 Option       "CornerBottomRightY" "1080"  # 1080 for 23"
 Option       "CornerScreenWidth" "1920" # 1920 for 23"
 Option       "CornerScreenHeight" "1080"  # 1080 for 23"
EndSection


Section "ServerLayout"
     Identifier "Touchscreen"
     InputDevice "Acer T230H" "SendCoreEvents"
EndSection

看到了嗎 "PacketCount"是"13"而
"OpcodeX"            "65584"
"OpcodeY"            "65585"
分別就是XY座標(10030)(10031)的兩個欄位 (別問我怎麼換算的, 我也不會)

看來相當有希望吧? 可是我重開機, 不會動, 就是不會動啊...
是哪裡錯了嗎? 檢查好幾遍都沒錯啊, 只好開始K文件了
看到

2. What's new
=============

This release fix the compilation problem, for the time being.

There was 2 notable new features in v10.05.18 :

- supporting screen rotation (only in 'four corner' calibration mode) whatever
the screen orientation (left, right, inverted, and normal), touching the screen
will place the cursor at the correct location.

- compatible with some multitouch device (THIS DOES NOT MEANS THAT THIS DRIVER
WILL SEND MULTITOUCH EVENT !) : when a device sends for each supported pointer
the same group of report, it is possible to take into account only the first
group.
Add the following to your xorg.conf, in the hidtouch section (in this sample
we suppose that the subgroup has 6 report) :

---8<------8<------8<------8<---
     Option "PacketManagement_HasSubgroup"     "1"
     Option "PacketManagement_SubgroupPacketCount"  "6"
     Option "PacketManagement_Strategy"             "0"
---8<------8<------8<------8<---



難不成要加這三行?加就加 (/etc/X11/xorg.conf), 結果真的會動了, 好感動...雖然只有單點
雖然會動是會動, 但常常冒出第二點, 看來要試試能不能支援兩點了.

2010年9月6日 星期一

Avast 5 無法更新病毒碼

Avast 5 有一段時間都沒辦法更新病毒碼,











就算手動更新也是一樣, 會卡住, 卡很大, 卡不用錢, 免費沒好貨?




今天想來處理一下, 谷歌了一下, 有人說是防火牆擋住了, 但防火牆關了還是一樣, 有人說是伺服器忙碌, 但也好好...好幾天了, 有人說反安裝再重新安裝, 這個嘛...留到最後才試. 有人說是中毒, 不不...不會吧? 而且還是超強的 Conficker 病毒? 因為此病毒會封鎖已知的防毒網站, 這這...這麼厲害, 嚇嚇...嚇死我了.  害我還很緊張的拔網路線, 抓解毒程式

結果全錯, 都不是, 解決方法還真爛...



"自動偵測"???不會吧!!!但這是真的, 原來我也不相信, 但改回"直接連線"還真的又不能更新, 嚇到了吧!

2010年8月24日 星期二

selinux 應用實例 xguest

看到一個 selinux 的應用實例 xguest, 也就是一個 guest 帳號, 而且是沒有密碼的, 根據文件的說明, 這個帳號只能瀏覽網路, 且所有的變更 (包含設定與新增檔案) 在登出後都會還原, 這應該是只有 selinux 才辦的到吧?

在 Fedora 13 上可以安裝 xguest, (在 Debian 5 就沒有這東西)

yum install xguest

裝好後就會出現 kiosk, 但實際的名稱是 xguest?






















點進去後, 隨便新增一個檔案, 登出再登入還真的不見了.

但是這到底是怎麼弄的?而且看到的東西不一樣?












































到底東西是藏哪呢? 難不成是類似 chroot 的效果?

2010年7月29日 星期四

Synology DS409+ 之 cron

Synology DS409+  的 cron 設定檔在  /etc/crontab, 可是我編輯好後怎麼時間到了也不會動作呢? 連 log 都沒有, 那我怎麼知道是哪裡出問題呢? 連想要重起 cron, 在  /etc/init.d/ 空空如也, 甚麼也沒有, 這也改的太徹底了吧? 還好有學過 signal, 那來試試 SIGHUP 好了, 先查 PID, ps | grep cron

2430 root   760 S   /usr/sbin/crond

再來 SIGHUP

kill -1 2430

結果, 終於會動了. 可是我記得 cron 不用重新啟動也可以吧?