[ Content | Sidebar ]

Posts tagged linux

定制一个Debian Live启动盘

这blog都快荒了~~,前些日子自己做了一个debian live的启动盘,把制作过程分享一下。文章适合喜欢linux并有使用经验的用户。

我做的debian live镜像有136M,包含一个firefox浏览器,一些网卡驱动和一个xterm.它的目标很明确,就是给使用者一个可以上网的环境。

窗口管理器采用了openbox,最开始用gnome,生成的镜像已经500多M了。。自带了一堆小软件,精简起来是个麻烦事。下面的任务栏使用tint2,输入法使用scim,网络管理使用wicd.关于这些软件的配置后面会介绍。

下面开始介绍制作和精简过程:

首先要有一个debian环境,俺用的是虚拟机里装的Debian6.02.有个真机版,但是已经被霸占。

第一步: 安装live制作工具live-build,实际使用的版本是2.0.12-1:

sudo apt-get install live-build
Copy Code 

第二步:创建工作目录,生成初始配置文件

mkdir ~/live
cd ~/live
lb config
Copy Code 

这时会生成一些默认配置,很多,但是用到的就几个

.
├── auto
│   ├── functions
│   └── scripts
└── config
    ├── binary
    ├── binary_debian-installer
    ├── binary_debian-installer-includes
    ├── binary_grub
    ├── binary_local-debs
    ├── binary_local-hooks
    ├── binary_local-includes
    ├── binary_local-packageslists
    ├── binary_local-udebs
    ├── binary_rootfs
    ├── binary_syslinux
    ├── bootstrap
    ├── chroot
    ├── chroot_apt
    ├── chroot_local-hooks
    ├── chroot_local-includes
    ├── chroot_local-packages
    ├── chroot_local-packageslists
    ├── chroot_local-patches
    ├── chroot_local-preseed
    ├── chroot_sources
    ├── common
    ├── includes
    ├── source
    └── templates

第三步:修改默认配置文件
修改config/common,

LB_APT_RECOMMENDS="false"
#禁用apt-get的推荐功能
#使用apt-get安装软件时会附带一些它觉的有必要一块装的东西,这无疑会安装一些不必要的软件增大生成live的尺寸
LB_CACHE_INDICES="true"
#是否缓存apt的软件索引,默认是false,如果网络比较好,建议不要缓存,但是我的网络比较差,不想每次都下载软件包索引
Copy Code 

修改config/bootstrap,live-build在bootstrap阶段会构建一个最基本的debian系统,将会读取该配置文件

LB_ARCHITECTURE="amd64" 
#amd64->64位版本
#i386 -> 32版本
#这里选64位,现在内存普遍超越4G了
LB_DISTRIBUTION="squeeze"
#指定debian的发行版本,这里使用最新的稳定版本squeeze
LB_ARCHIVE_AREAS="main contrib non-free"
#由于要安装一些nonfree的软件,要修改一下apt的“尺度”,默认是 main
#其他还有软件源的配置,我这里用cdn.debian.net反而比163的快
Copy Code 

修改config/chroot, live-build将会在构建live的文件系统时使用该配置

LB_HOOKS="minimal"
#制定一个钩子脚本,lb将在构建完根目录后调用,默认为空
#minimal将会调用/usr/share/live/build/hooks/minimal这个清理脚本
#minimal将会清理apt缓存,删除/var/log下的一些无用文件,但是清理力度
#依然不够,后面我们会添加自己的清理脚本
LB_PACKAGES_LISTS="bluehua"
#指定我们要安装的软件列表 
#bluehua代表了config/chroot_local-packageslists/bluehua.list这个文件
Copy Code 

然后继续修改config/binary,来定制我们要生成的介质类型

LB_BINARY_IMAGES="iso-hybrid"
#usb-hdd生成可以写入usb的镜像
#iso-hybrid生成可以写入光盘的镜像
LB_BOOTAPPEND_LIVE="locales=zh_CN.UTF-8"
#定制linux启动参数,这里我们指定一下系统的语言
LB_MEMTEST="none"
#为了减小尺寸,不要包含memtest
Copy Code 

第四步:定制自己的软件列表
直接给出我的软件列表
config/chroot_local-packageslists/bluehua.list

xinit
xserver-xorg
x11-xserver-utils
#基本的X系统

user-setup
#可以在系统启动时自动创建一个用户

locales
#本地化信息

xfonts-wqy
#文泉驿的中文字体

openbox
#openbox窗口管理器

tint2
#任务栏

feh
#feh用来设置桌面壁纸

iceweasel
iceweasel-l10n-zh-cn
#firefox和中文语言包

flashplugin-nonfree
#浏览器的flash插件

wicd-gtk
#网络管理软件

xterm
#简单的终端软件

sudo
#没有sudo的系统怎么可以呢

scim
scim-pinyin
scim-gtk2-immodule
#scim中文输入法

hicolor-icon-theme
#一些常用的图标

alsa-base
alsa-utils
#让系统可以发出声音

firmware-bnx2
firmware-bnx2x
firmware-brcm80211
firmware-iwlwifi
firmware-linux
firmware-linux-free
firmware-linux-nonfree
firmware-ralink
firmware-realtek
#尽可能多的网卡驱动

到这里lb build运行一下,已经可以出来一个live的镜像文件,但是结果并不如您所愿,启动起来只是一个丑陋的默认X桌面。
我们要继续对安装的软件进行配置,下面给出部分配置。

首先我们要让openbox代替那个丑陋的默认X桌面

mkdir -p config/chroot_local-includes/etc/skel
#通过chroot_local-includes这个目录你可以向生成的live系统的文件系统里追加覆盖文件
#比如新建一个config/chroot_local-includes/test.txt
#那么当启动生成的live系统后,你会在根目录/找到test.txt这个文件
 
#/etc/skel这个目录里保存了新建用户目录的默认内容
#比如 sudo echo "set nu" > /etc/skel/.vimrc
#然后通过useradd -m testuser 增加一个新用户
#然后你会找到/home/testuser/.vimrc这个文件
Copy Code 

新建 config/chroot_local-includes/etc/skel/.xinitrc
内容如下

exec openbox-session

OK,这样openbox就可以启动起来了(至于为什么,请google搜索x系统的启动过程),然后我们继续配置openbox
新建 config/chroot_local-includes/etc/skel/.config/openbox/autostart.sh 内容如下:

#!/bin/sh
export XMODIFIERS="@im=SCIM"
export XIM="SCIM"
export GTK_IM_MODULE="scim"
export QT_IM_MODULE="scim"
scim -d &
#启动输入法
tint2 &
#启动任务栏
(sleep 2 && iceweasel) &
#启动浏览器
(sleep 2 && wicd-gtk) &
#启动网络管理器
feh --bg-scale /usr/share/wallpagers/debian.png
#设置一张壁纸
#已经事先放到config/chroot_local-includes/usr/share/wallpagers/debian.png 了

之后不要忘了加执行权限

费了这么大功夫,终于算差不多了,运行一下lb build,喝杯茶的功夫再回来,应该看到有生成的binary-hybrid.so,但是大小应该接近200M的样子.下面将介绍我们的清理脚本,清理脚本应该放到config/chroot_local-hooks。这个目录下的脚本,将在live系统的文件系统构建完成之后执行。
cat config/chroot_local-hooks/03-remove-docs.sh 内容如下

#!/bin/sh
 
echo "remove unused packages"
 
apt-get remove -y --purge aptitude
apt-get remove -y --purge libg11-mesa-dri
apt-get remove -y --purge nano
apt-get remove -y --purge manpages
apt-get remove -y --purge openbox-themes 
apt-get remove -y --purge iptables 
 
#上面将删除一些用不到的软件,man手册比较大
 
apt-get -y autoremove
apt-get -y clean 
 
 
rm -rf /var/cache/flash*
#删除flash插件安装过程中下载的临时文件
 
echo "remvoe all docs"
rm -rf /usr/share/doc/*
rm -rf /usr/share/doc-base/*
#删除所有文档
 
echo "remove all man docs"
rm -rf /usr/share/man/*
#删除自带的一些man文档
 
echo "remove apt lists"
rm -rf /var/lib/apt/lists/*
 
echo "remove apt cache"
rm -rf /var/cache/apt/*.bin
#删除apt缓存
 
locale-gen
 
if cd /usr/share/locale;then
ls -1|grep -v zh_CN|grep -v locale|xargs rm -rf "{}"
fi
 
#删除除了zh_CN之外的所有本地化信息
 
#remove some driver
rm -rf /lib/modules/*/kernel/drivers/isdn
rm -rf /lib/modules/*/kernel/drivers/media
#删除不常用的驱动
Copy Code 

同样不要忘了加执行权限,有了这个神奇的脚本,live的尺寸就可以降到136M~

总结如下:

1 简单的三个命令 lb config 生成默认配置,lb build 构建live系统,lb clean 清理。
2 需要安装的软件列表放到config/chroot_local-packageslists/xxxx.list,并在config/chroot里通LB_PACKAGES_LISTS指定
3 需要覆盖到生成系统中的文件放到config/chroot_local-includes
4 用户home目录的默认配置文件放到config/chroot_local-includes/etc/skel
5 需要在系统构建完成之后执行的动作放到config/chroot_local-hooks

postfix出错一则

能收到邮件但是发不出去

错误日志如下

Nov  4 20:32:21 localhost postfix/cleanup[4853]: warning: 51CCA2E129: virtual_alias_maps map lookup probl         em for xxxx@gmail.com
Nov  4 20:33:21 localhost postfix/pickup[4851]: 587A12F5F5: uid=0 from=
Nov  4 20:33:21 localhost postfix/cleanup[4853]: warning: connect to mysql server localhost: Can't connec         t to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

原因是之前配置了基于mysql的地址映射

virtual_alias_maps = mysql:/etc/postfix/mysql-alias.cf

当一些在chroot环境中运行的postfix组建试图通过/var/run/mysqld/mysqld.sock连接数据库时就报错了,在master.cf里禁用smtp,rewrite,cleanup的chroot即可

smtp      inet  n       -       n       -       -       smtpd
rewrite   unix  -       -       n       -       -       trivial-rewrite
cleanup   unix  n       -       n       -       0       cleanup

#这是一种不安全的fix方法,另一种解决方法是修改my.conf同过3306端口访问mysql,也可以解决问题。

bash拼音补齐靠谱版本

之前玩ubuntu的时候写过一个,功能和代码都较丑,用的拼音库也很烂。正好为项目抓了一个靠谱的拼音库,顺便把这个bash补齐又重新实现了下,Mac上也可以用了~

项目:http://code.google.com/p/bash-pinyin-completion/

==特性==
* 支持拼音首字母匹配和完全匹配
* 支持多音字匹配

安装

ubuntu

支持10.04,10.10,11.04版本从ppa安装,如果之前安装过那个chs-completion先卸载之

sudo add-apt-repository ppa:emptyhua/toolbox
sudo apt-get update
sudo apt-get install bash-pinyin-completion

然后新开一个终端,就可以使用拼音补齐了

Mac OS X

对于mac需要先安装 bash-completion

sudo port install bash-completion

然后编辑~/.bash_profile,把下面的代码贴进去

if [ -f /opt/local/etc/bash_completion ]; then
. /opt/local/etc/bash_completion
fi

下载源码包http://code.google.com/p/bash-pinyin-completion/downloads/list

unzip bash-pinyin-completion-xxx.zip
cd bash-pinyin*
make
sudo make install

然后新开一个终端,就可以使用拼音补齐了

linux中tty设备名的由来

tty是teletypewriter(电传打字机)的简称,电传打字机是一种老式的通信工具,类似于传真,它有一个用于输入的键盘和用于输出接收信息的纸带打印设备。当按下按键后,电传机会把对应的键码编码成电流脉冲发送给接收方。对方收到脉冲后解码,并将对应的字符打印到纸带上。

早期的一些计算机便使用电传机来做输入输出设备。用户通过电传机向计算机输入指令,并通过纸带打印计算机的反馈结果,这便是最原始的command line interface(命令行交互)。

unix系统会为所有设备在/dev目录下生成对应的文件,电传机便被命名为/dev/tty#(#代表数字序号)。虽然现在的计算机早已经不再使用电传机做IO设备,但是tty的命名依然沿用至今。

links:
http://www.linfo.org/teletype.html
http://baike.baidu.com/view/1773688.htm

key code table

Key Mac Windows Linux Notes
rbKeyUp 126 26 103
rbKeyDown 125 28 108
rbKeyLeft 123 25 105
rbKeyRight 124 27 106
rbKeyBackspace 117 8 14
rbKeyEnter 76 * 28
rbKeyHome 115 36 102
rbKeyEnd 119 35 107
rbKeyPageDown 121 34 109
rbKeyPageUp 116 33 104
rbKeyReturn 36 13 *
rbKeyDelete 51 46 111
rbKeyTab 48 9 15
rbKeySpacebar 49 20 57
rbKeyShift 56 10 *
rbKeyControl 59 11 *
rbKeyMenu 58 18 139 The Alt key
rbKeyPrintScreen * 42 210
rbKeyEscape 53 27 1
rbKeyCapsLock 57 20 58
rbKeyHelp 114 47 138
rbKeyF1 122 112 59
rbKeyF2 120 113 60
rbKeyF3 99 114 61
rbKeyF4 118 115 62
rbKeyF5 96 116 63
rbKeyF6 97 117 64
rbKeyF7 98 118 65
rbKeyF8 100 119 66
rbKeyF9 101 120 67
rbKeyF10 109 121 68
rbKeyF11 103 122 87
rbKeyF12 111 123 88
rbKeyMacFn 63 * *
rbKeyMacOption 58 * *
rbKeyMacCommand 55 * *
rbKeyWinLeftWindow * 91 * On “Natural” keyboards
rbKeyWinRightWindow * 92 * On “Natural” keyboards
rbKeyWinApplication 110 93 * On “Natural” keyboards
rbKeyQ 12 81 16
rbKeyW 13 87 17
rbKeyE 14 69 18
rbKeyR 15 82 19
rbKeyT 17 84 20
rbKeyY 16 89 21
rbKeyU 32 85 22
rbKeyI 34 73 23
rbKeyO 31 79 24
rbKeyP 35 80 25
rbKeyA * 65 30
rbKeyS 1 83 31
rbKeyD 2 68 32
rbKeyF 3 70 33
rbKeyG 5 71 34
rbKeyH 4 72 35
rbKeyJ 38 74 36
rbKeyK 40 75 37
rbKeyL 37 76 38
rbKeyZ 6 90 44
rbKeyX 7 88 45
rbKeyC 8 67 46
rbKeyV 9 86 47
rbKeyB 11 66 48
rbKeyN 45 78 49
rbKeyM 46 77 50
rbKey0 29 48 11
rbKey1 18 49 2
rbKey2 19 50 3
rbKey3 20 51 4
rbKey4 21 52 5
rbKey5 23 53 6
rbKey6 22 54 7
rbKey7 26 55 8
rbKey8 28 56 9
rbKey9 25 57 10
rbKeyPeriod 47 190 52
rbKeyComma 43 188 51
rbKeySlash 44 191 53 The key with /? generally next to right shift key.
rbKeyNum0 82 96 82 On numeric keypad or with NumLock
rbKeyNum1 83 97 79 On numeric keypad or with NumLock
rbKeyNum2 84 98 80 On numeric keypad or with NumLock
rbKeyNum3 85 99 81 On numeric keypad or with NumLock
rbKeyNum4 86 100 75 On numeric keypad or with NumLock
rbKeyNum5 87 101 76 On numeric keypad or with NumLock
rbKeyNum6 88 102 77 On numeric keypad or with NumLock
rbKeyNum7 89 103 71 On numeric keypad or with NumLock
rbKeyNum8 91 104 72 On numeric keypad or with NumLock
rbKeyNum9 92 105 73 On numeric keypad or with NumLock
rbKeyMultiply 67 106 55 On numeric keypad or with NumLock
rbKeyAdd 69 107 78 On numeric keypad or with NumLock
rbKeySubtract 78 109 74 On numeric keypad or with NumLock
rbKeyDivide 75 111 98 On numeric keypad or with NumLock
rbKeyDecimal 65 110 83 On numeric keypad or with NumLock
rbKeyNumEqual 81 * 117 On numeric keypad or with NumLock

from:http://classicteck.com/rbarticles/mackeyboard.php