指令cpio備忘

備份
Server:~ # find /home/csliu | cpio -o > /root/csliu.cpio
Server:~ # find /home/csliu | cpio -oF /root/csliu.cpio

查看
Server:~ # cpio -t < style="letter-spacing: 0px; ">Server:~ # cpio -tF csliu.cpio

還原
Server:~ # cpio –i < style="letter-spacing: 0px; ">Server:~ # cpio -iF csliu.cpio

VBox share folder setting

* 客端作業系統為Windows時:當你在功能表列上選取裝置→安裝客端額外功能,他就會開始安裝,直到結束。他就會將相關的虛擬驅動程式安裝完成,定打開主客間很重要的資料夾分享的功能,在使用手冊上說明你可以在命令提示字元上輸入net use x: \\vboxsvr\sharename其中”x”代表網路磁碟機的代號,你可以自選,”sharename”為你自己所設定的分享資料夾的名字,但或許你可利用檔案管理員上得的工具→連線網路磁碟機上去做選擇可能會容易一些。

* 客端作業系統為Linux時:在功能表列上選取和按下裝置→安裝客端額外功能後,就會掛載上一個虛擬光碟,然後利用root的權限執行VBoxLinuxAdditions.run,就會將額外的功能來開啟。而在主客間的資料夾分享功能,在使用手冊上說明是mount -t vboxsf [-o OPTIONS] sharename mountpoint,其中”sharename”是你自訂分享資料夾的名字,”mountpoint”是在linux裡所要掛載對應的資料夾位置,例如: /mnt/share,而在/mnt下的”share”目錄夾,你可要用root的身份去自己建立,所以你也可以自行去命名,所以自行可用如”sudo mount -t vboxsf myz /mnt/zd“。

cpio + gzip

壓縮
$find folder1 | cpio -ocvB | gzip > folder1.cpio.gz
$dd if=/dev/sdan bs=4096 conv=notrunc,noerror | gzip > /path/image.gz
解壓縮
$gzip -dc folder1.cpio.gz | cpio -idv
$gzip -dc /path/image.gz | dd of=/dev/sdan bs=4096 conv=notrunc,noerror

昨天轉貼了一篇將Ubuntu 6.10 Edgy放進我們的隨身碟裡,但是那個方法有些麻煩,因為還要是下載一個 USBEdgy.zip的檔案,而這個檔案也蠻大的,也有六百多M,若是只要利用原本下載的ISO檔那不是頂好的,那就用昨天所講可能的第三種方式來安裝,這個方式的流程幾乎是一樣的,只是我們今天用的是Ubuntu 7.04 Feisty Fawn 這個新的版本,安裝步驟參考Pen Drive Linux網站的網頁USB Ubuntu 6.10 Edgy install,我們先打下載回來的ubuntu-7.04-desktop-i386.iso這個ISO檔解開(可用poweriso、winrar等可以解開ISO檔的工具都行)到我們自己新增名為ubuntu的目錄夾內和到Pen Drive Linux網站的開網頁內下載一個檔案fixu.zip(約2K)和解開將裡面的兩個syslinux.cfgfixu.bat這個批次檔放進剛才我們自己設的ubuntu目錄夾內,並點擊fixu.bat這個批次檔,按照螢幕所是執行就可以了。其他的步驟和昨天這篇將Ubuntu Linux 作業系統放進我們的隨身碟裡---我的隨身儲存工具及使用---軟體幾乎一樣。這裡就在重新整理一次。利用虛擬作業系統載入ubuntu-7.04-desktop-i386.iso檔執行,進到Ubuntu Linux作業系統裡,開啟終端機程式,其他步驟如下 :

首先看看USB隨身碟有多少partition
sudo fdisk -l

再來把這些partition全部 umount (退出)
sudo umount /dev/sdaX (X就代入你的分割區代號)

然後就是重新分割USB啦
sudo fdisk /dev/sda

將原本隨身碟內的partition刪除,然後新建一個FAT16和一個Linux的partition,FAT16這個partition至少要707MB,因為先前我們自己新增的ubuntu目錄夾和一些動作後的大小大概要那麼大,所以給partition 1(FAT16)約750MB的空間(+750M),其他的就給Linux的partition。

再來就是格式化partition
sudo mkfs.vfat -F 16 -n USB /dev/sdb1 或 sudo mkfs.vfat -F 32 -n USB /dev/sdb1

sudo mkfs.ext2 -b 4096 -L casper-rw /dev/sdx2

當格式化完後,移除我們的隨身碟,然後再重新插入我們的隨身碟,將會看到 USBcasper-rw 這兩個partition出現。

然後把開機需要的syslinux也灌進USB裡面,做這個之前要先裝syslinux和mtools
sudo apt-get install syslinux mtools

再來安裝syslinux
syslinux -sf /dev/sda1

最後就是把ubuntu目錄夾內的檔案全部移到 USB (也就是FAT16這個磁區內)裡去,重新開機,進到BIOS內把開機順序改由USB設備或該隨身碟為先,儲存後再重開機,當啟動進入Ubuntu的開機選單按F2選擇你要的語言,然後再選擇 "USB",就可以了。

附記 :

上一篇貼文 :將Ubuntu Linux 作業系統放進我們的隨身碟裡---我的隨身儲存工具及使用---軟體

Powered by Zoundry

[轉載] Build xPUD with mkxpud

Build xPUD with mkxpud

This is a brief how-to on building xPUD with Ubuntu 9.04.

Download Rootfs and Modules

$ wget http://download.xpud.org/devel/jaunty-rootfs.tgz $ mkdir jaunty-xpud $ sudo tar zxvf jaunty-rootfs.tgz -C jaunty-xpud/ 

Internet connection inside build system

$ sudo chroot jaunty-xpud/rootfs/ mkdir -p /proc/net/dev/ $ sudo chroot jaunty-xpud/rootfs/ dhclient 

Upgrade and Setting

$ sudo cp /etc/hosts jaunty-xpud/rootfs/etc/hosts $ sudo chroot jaunty-xpud/rootfs/ apt-get update $ sudo chroot jaunty-xpud/rootfs/ apt-get upgrade 

Export mkxpud from Repository

$ sudo git clone git://github.com/penk/mkxpud.git jaunty-xpud/rootfs/mkxpud $ find jaunty-xpud/rootfs/mkxpud -name .git* -exec rm -rf {} \; 

Build the xPUD Rootfs

$ sudo chroot jaunty-xpud/rootfs/ $ cd mkxpud/ $ ./tools/mkxpud all 

That’s it, the default cookbook will work. :-)

Bonus: Creating Image

if you’re looking for a way to combine the kernel and rootfs, download the linux-source, and edit .config to find this line:

CONFIG_INITRAMFS_SOURCE="/home/penk/snap-mkxpud/deploy/default/rootfs.cpio" 

replace it with your absolute path pointing to the rootfs.cpio just created, then:
$ make bzImage 

after compiling, the file will be put under arch/x86/boot/bzImage.

Build xPUD with mkxpud

This is a brief how-to on building xPUD with Ubuntu 9.04.

Step1:

Linux: mount iso images

A normal situation for every Linux user: you've downloaded an ISO image of your favourite distribution and you'd like to copy say just one little file. Burning that image on CD only to get that particular file would be pure non sense. The easy and quick solution is to mount that image on your harddisk and access all files contained in the ISO file. Unlike under Windows where you would have to use third party applications like Daemon Tools, all this functionality is included in every standard linux kernel.

Step 1: Setup the kernel

First of all, you'll have to check whether certain options are included in your kernel. If you're using a standard kernel from one of the major distributions, it's pretty likely that everything necessary is already included so you might want to skip this step. If you have a self-compiled kernel - and I recommend everyone to compile the kernel oneself - you'll have to enable the following options in your kernel:

in Device Drivers > Block Devices     Loopback device support    in File Systems > CD-ROM/DVD Filesystems    ISO 9660 CDROM file system support    [*]   Microsoft Joliet CDROM extensions    [*]   Transparent decompression extension 

Of course you can also compile the features into the kernel but I always advise to compile everything as module as long as it is not crucial to run the kernel - like file systems. Btw. you don't need the extra options of ISO 9660 but it's never a mistake to have them switched on.

Mount the ISO!

Now as you're kernel is setup, we can start to mount ISO images:

~# mount -o loop -t iso9660 debian-sid.iso /mnt/isoimage/ 

You'll now be able to access all files in that iso via the /mnt/isoimage/ folder. That's easy right?

iPhone 開發的小技巧

1 亂數的使用

標頭檔

#import

#import


srandom()
的使用
srandom((unsigned)(mach_absolute_time() & 0xFFFFFFFF));

直接使用 random() 來調用亂數

2 在UIImageView 中旋轉圖片

float rotateAngle = M_PI;
CGAffineTransform transform =CGAffineTransformMakeRotation(rotateAngle);
imageView.transform = transform;
以上程式旋轉imageView,角度為rotateAngle,方向可以自己測試唷!

3 在Quartz中如何設定旋轉點

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg.png"]];
imageView.layer.anchorPoint = CGPointMake(0.5, 1.0);


這個是把旋轉點設置為底部中間。記住是在QuartzCore.framework中才得到支持。

4 創建.plist文件並儲存

NSString *errorDesc; //用來存放錯誤訊息用
NSMutableDictionary *rootObj = [NSMutableDictionary dictionaryWithCapacity:4]; //NSDictionary, NSData等文件可以直接賺喚為plist文件

NSDictionary *innerDict;
NSString *name;
Player *player;
NSInteger saveIndex;

for(int i = 0; i < [playerArray count]; i++) { player = nil; player = [playerArray objectAtIndex:i]; if(player == nil) break; name = player.playerName;// This "Player1" denotes the player name could also be the computer name innerDict = [self getAllNodeInfoToDictionary:player]; [rootObj setObject:innerDict forKey:name]; // This "Player1" denotes the person who start this game } player = nil;

NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:(id)rootObj format:NSPropertyListXMLFormat_v1_0 errorDescription:&errorDesc];

红色部分可以忽略,只是给rootObj添加一点内容。這個plistData為創建好的plist文件,用其writeToFile方法就可以寫成文件。下面是代码


/*得到移動設備上的文件存放位置*/
NSString *documentsPath = [self getDocumentsDirectory];
NSString *savePath = [documentsPath stringByAppendingPathComponent:@"save.plist"];

/*存文件*/
if (plistData) {
[plistData writeToFile:savePath atomically:YES];
}
else {
NSLog(errorDesc);
[errorDesc release];
}


- (NSString *)getDocumentsDirectory {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
return [paths objectAtIndex:0];
}


4 讀取plist文件並轉換為NSDictionary

NSString *documentsPath = [self getDocumentsDirectory];
NSString *fullPath = [documentsPath stringByAppendingPathComponent:@"save.plist"];
NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:fullPath];


5 讀取一般性檔案文件

NSString *tmp;
NSArray *lines;
/*將文件轉換為一行一行的*/
lines = [[NSString stringWithContentsOfFile:@"testFileReadLines.txt"]
componentsSeparatedByString:@"\n"];

NSEnumerator *nse = [lines objectEnumerator];

// 讀取<>裡的内容
while(tmp = [nse nextObject]) {
NSString *stringBetweenBrackets = nil;
NSScanner *scanner = [NSScanner scannerWithString:tmp];
[scanner scanUpToString:@"<" intoString:nil]; [scanner scanString:@"<" intoString:nil]; [scanner scanUpToString:@">" intoString:&stringBetweenBrackets];

NSLog([stringBetweenBrackets description]);
}


對於讀取文件,還有補充,暫時到此。亂數和文件讀取寫在遊戲開發中經常用到。所以把這部份內容放在這,以便和大家分享,也當記錄便於查找。

6 隱藏NavigationBar
[self.navigationController setNavigationBarHidden:YES animated:YES];

在想隱藏的ViewController中使用就可以了。

[轉貼]Reconstructor - Ubuntu Live CD 重製工具


0.緣起:
目前花蓮縣力推 Linux 進入教學現場(資訊教育),當初以相容性為考量,找了市面上的Live CD,最後決定用B2DpureKGB。
B2DpureKGB的確很不錯,硬體幾乎都能支援,也有許多好用的功能,但是就使用者的眼光而言,畢竟不夠美、不夠炫。
後來在偶然間用了 Edubuntu ,可愛的圖案,操作的便利,覺得更適合讓小學生用。

學生回家後,幾乎沒有 Linux的環境可供練習,必須提供 Live CD。這次因為上級補助,本校提供每人1片 li-Linux 2006
(B2DpureKGB再製版) 回家用,不但打開 Linux 的能見度,學生的學習也得以延續。

不過,本校因改用 Ubuntu 的 dapper 版本(用edgy,USB無法啟動),所以想提供 edubuntu edgy 的live cd,更契合上課環境。
而其 live cd 不管語系如何選,進去後還是英語,而有些軟體也不太夠用,因此動啟重製的念頭。

Google真是我們的好幫手,一下子就找到了:
LinuxTOY » Ubuntu Live CD 個性化定制全程圖解
這是個圖形化的工具,動動滑鼠就能輕鬆將gnome介面的 ubuntu live cd 修改,還能保有原來的特色。

一、安裝:
請到官網
reconstructor下載頁面,下載 deb 檔。下載時,可以選 『開啟方式』- GDebi package Installer,
GDebi 會幫你把需要的其他套件一併安裝。

二、使用:
1.開始


2.升級:按左下角的Update

3.第一關:選擇source

第1次用,3個 create 都要勾,之後換 iso 檔才需要勾。
指定 iso 檔後,按 Next 進入下1關。

4.第二關:設定 gnome、新增/移除程式

這裡可以設定開機splash,如果不設,會用 iso 檔原來的。


這裡可以設定gnome的佈景主題、桌布、圖示、字型等。


這裡則指定sources.list的內容,台灣地區可以將
http://apt.ubuntu.org.tw/sources.list.edgy 的內容直接貼上。


設定最佳化。


設定帳號、密碼、主機名稱等。


新增移除程式用,可以使用內建的模組,也可以開啟左下角的 Terminal,利用 apt-get install來安裝。

最後,別忘了要按 Apply 讓改變生效!


5.第三關:設定輸出,產生ISO檔

在 Filename 指定 iso 檔名。
產生ISO檔約10多分鐘,可以休息一下。

6.第四關:完成,燒錄。

完成後,按 Burn ISO可以直接燒錄,或是使用 qemu 模擬看看。
qemu install:
sudo apt-get install qemu bochsbios vgabios

use:
sudo mount -t tmpfs -o size=272m none /dev/shm
qemu -cdrom ~/ubuntu-custom.iso -boot d -m 256

心得:
1.不要急著按 Finish,先將成果試用看看,要修改的話,按 Back 直接修改即可,不用重頭來。
2.Firefox會自動安裝flashplayer,直接將本機的 ~/.mozilla 資料夾複製到 reconstructor/root/etc/skel/下,
就不用裝flashplugin-nonfree套件,書籤也一併進去了。
3. 官方 live cd有很多用不到的套件,像ttf-xxxxxx-fonts,很多是其他語系用的;
language-pack-XX、language-pack-gnome-xx、language-pack-kde-xx用不到的也都可以移除。
4.可以參考
Linux 桌面瘦身加速工具組 — trans-purge 來瘦身。
5. edubuntu 無法用上面的方法,只好自己去找,像語系在 reconstructor/root/usr/share/locale-language。
6. gnome 在附屬應用程式有個好工具:磁碟用量分析器,可以用來找到還有哪裡很佔空間?
找到了,進 terminal 除掉它!或用 gksu nautilus進去刪。
7.gnome 的選單有很多程式沒顯示,可到 reconstructor/root/usr/share/applications/ ,打開該軟體的
xxxxxx.desktop,把 nodisplay= false 改成 true。
8.中文語系 language-pack-zh, language-pack-gnome-zh, language-pack-kde-zh 裝好後,再裝language-support-zh ,
會把缺的都裝好。

客製化光碟最簡單的方法

1.首先在一台機器上灌好 ubuntu 系統,並做好所有的更新和你想要改的設定。
2.接下來就是備份系統到光碟去了,當然是要備份成可以安裝的。
3.這片光碟裡會保留你系統上所有的個人資料,含你的帳密,因此安裝過程中,問你輸入帳密,都是沒用的,只能整個裝好後再去改帳密。

以下是詳細的操作流程:

Remastersys 是做客製化光碟最簡單的做法

1 裝好ubuntu,並改好所有設定和更新
2 安装打包工具,Remastersys

a.編輯此檔,請下指令:
引文:

sudo gedit /etc/apt/sources.list



b.加入下列兩行:
引文:


# Remastersys base-on ubuntu
deb
http://www.remastersys.klikit-linux.com/repository remastersys/

# Remastersys base-on debian
deb http://www.remastersys.klikit-linux.com/repository debian/


c.請下指令
引文:

sudo apt-get update
sudo apt-get install remastersys



3.開始打包
請下指令
引文:


sudo remastersys backup custom.iso


運行時間大約10~20幾分鐘,此指令會備份你的系統,並產生一個 custom.iso 檔,位於 /home/remastersys 內,將此檔燒成光碟即可。用此光碟來安裝就可以你原來的設定安裝到別台上。(註:光碟開機會提示你要打install,才會進入安裝程序)


4.最後,清除由 remastersys 產生的臨時檔

sudo remastersys clean

用VIM编写C/C++程序

用VIM编写C/C++程序

Vi是Unix下最常用的文本编辑器。VIM(Vi IMproved)则是它的增强版。有人常常拿VIM和emacs比较,VIM尽管不象emacs那样有那么多的功能,但是比emacs更方便、好用。用过emacs的人肯定会为emacs的一些快捷键感到烦恼,有时候用真希望自己有八只手。VIM的学习曲线也不象emacs那么长,只要看看VIM自带的vitutor,大约只要20分钟就能掌握VIM的用法。对于Unix下的C/C++的程序员,我推荐你们使用VIM+Ctags的组合来写程序。其中原因听我慢慢道来。(下面对VIM的介绍主要是针对5.6以后的版本)
VIM支持语法制导和自动缩进

VIM会根据文件的后缀名,如:*.c、*.cpp、*.cc,等,自动设置语法制导(Syntax Highlighting)。C/C++中的一些保留字,如:if、for、include,等等,就会有不同的颜色,这样就会减少程序员犯错的可能,阅读程序的时候相对来说也轻松很多。用下面这些命令在VIM中查看有关语法制导的帮助:“:h syntax”、“:h syn-qstart”、“:h syntax-printing”。

VIM也支持根据GNU的风格自动缩进,这样程序员编写出来的代码就更易阅读,而且也有利于培养好的编程风格。用下面这些命令在VIM中查看有关自动缩进的帮助:“:h cindent”、“:h cinoptions”、“:h cinoptions-values”、“:h cinkeys”、“:h cinwords”。
使用Ctags

VIM中已经带了Ctags这个程序。尽管ctags也可以支持其它编辑器,但是它正式支持的只有VIM。Ctags可以帮助程序员很容易地浏览源代码。用下面的命令可以在源代码的根目录下创建“tags”文件:

[/home/brimmer/src]$ ctags -R

“-R”表示递归创建,也就包括源代码根目录下的所有子目录下的源程序。“tags”文件中包括这些对象的列表:

l 用#define定义的宏

l 枚举型变量的值

l 函数的定义、原型和声明

l 名字空间(namespace)

l 类型定义(typedefs)

l 变量(包括定义和声明)

l 类(class)、结构(struct)、枚举类型(enum)和联合(union)

l 类、结构和联合中成员变量或函数

VIM用这个“tags”文件来定位上面这些做了标记的对象,下面介绍一下定位这些对象的方法:

1) 用命令行。在运行vim的时候加上“-t”参数,例如:

[/home/brimmer/src]$ vim -t foo_bar

这个命令将打开定义“foo_bar”(变量或函数或其它)的文件,并把光标定位到这一行。

2) 在vim编辑器内用“:ta”命令,例如:

:ta foo_bar

3) 最方便的方法是把光标移到变量名或函数名上,然后按下“Ctrl-]”。用“Ctrl-o”退回原来的地方。

注意:运行vim的时候,必须在“tags”文件所在的目录下运行。否则,运行vim的时候还要用“:set tags=”命令设定“tags”文件的路径,这样vim才能找到“tags”文件。
快速改正错误

在VIM编辑器的环境下用“:make”就可以编译程序,当然其前提是在当前目录下有Makefile文件。运行完“:make”之后,如果程序中有错误,就会显示出来。这时候,光标会自动指向第一个出现错误的地方,而且你还可以看到错误的提示。然后,你就可以改正错误,而不用手工找到出错的那一行。记住下面几个有用的命令:

l “:cl”列出错误

l “:cn”让光标指向下一个错误

l “:cp”让光标指向上一个错误

l “:cnew”从头开始

你甚至可以让VIM识别出其它编译器而不是gcc的错误提示。这对一些开发嵌入式系统的程序员这很有用,因为他们很可能用的不是gcc而是其它编译器。通过设置“errorformat”的值,可以让VIM识别出编译器的出错提示。因为不同的编译器的出错提示是不同的,所以如果用的不是gcc就要重新设置。

“errorformat”的值是一个字符串,它的格式和C语言的scanf的字符串格式相识。

gcc的“errorformat”的值为:%f:%l:\%m。其中“%f”表示文件名,“%l”表示行号,“%m”表示出错信息。

用“:h errorformat”查看详细的帮助信息。

用“:h quickfix”、“:h make”、“:h makeprg”、“:h errorfile”查看其它的信息。
有用的快捷键

下面的这些快捷键对程序员很有帮助:
在函数中移动光标

[[ 转到上一个位于第一列的“{”

]] 转到下一个位于第一列的“{”

{ 转到上一个空行

} 转到下一个空行

gd 转到当前光标所指的局部变量的定义

* 转到当前光标所指的单词下一次出现的地方

# 转到当前光标所指的单词上一次出现的地方
括号的匹配

% 用来进行小括号、中括号和大括号的匹配。这要看当前光标指向的是什么符号了。
其它

VIM的配置文件是“.vimrc”,用这个文件可以配置VIM。VIM的图形界面的版本叫gvim。VIM也有用于Windows平台的版本。
VIM的资源

VIM的主页:http://www.vim.org/
版权说明

这篇文章的版权属于作者brimmer(brimmer@linuxaid.com.cn)和www.linuxaid.com.cn。如果要转载请加上版权提示。

Brimmer的主页:www.linuxaid.com.cn/engineer/brimmer。HTML格式和Word格式的文档可以在主页上找到。

虹光大成就-密教灌頂(一)