Gentoo Linux on T43 (15) Fn + Keys

对于Linux 对Thinkpad Fn 组合键的支持的了解一直比较模糊,有很多内核中的支持以及软件包,不太清楚具体的分工以及关系,今天查阅了一些资料,试图清理一下自己的思路,也把自己的配置共享一下。 下面给一些包及内核Module加一些注释: 内核Thinkpad ACPI 在2.6.20 中叫做IBM ACPI,这里是它的项目主页。如果编译为module,名字为thinkpad_acpi,它的功能是把Fn 组合按键的事件export 到/proc/acpi(在kernel-2.6.24 中应该选择此项:[*] Deprecated /proc/acpi/event...

对于Linux 对Thinkpad Fn 组合键的支持的了解一直比较模糊,有很多内核中的支持以及软件包,不太清楚具体的分工以及关系,今天查阅了一些资料,试图清理一下自己的思路,也把自己的配置共享一下。

下面给一些包及内核Module加一些注释:

内核Thinkpad ACPI

在2.6.20 中叫做IBM ACPI,这里是它的项目主页。如果编译为module,名字为thinkpad_acpi,它的功能是把Fn 组合按键的事件export 到/proc/acpi(在kernel-2.6.24 中应该选择此项:[*] Deprecated /proc/acpi/event support ),但其并不负责处理事件,需要其它userspace 程序来处理。

app-laptop/tp_smapi

来自Tpctl 项目 ,将thinkpad 硬件的信息export 到sysfs,供其它程序使用,目前主要实现了电池管理和HDAPS的功能。Fn keys应该不需要这个软件包,但我一直使用patched kernel + tp_smapi 来驱动HDAPS。

包含moduels:

hdaps
thinkpad_ec
tp_smapi

app-laptop/thinkpad

也来自Tpctl 项目 ,但目前已经被上面的tp_smapi 所取代,除非使用很古老的笔记本(before 2001),应该不需要这个软件包。

sys-power/acpid

acpid需要配合thinkpad-acpi使用,它默认读取/proc/acpi/event 中的条目,并将其传递给事件处理脚本,作出相应动作,比如关闭屏幕、待机等。 这些条目由/etc/acpi/events/default 捕获,并传递给/etc/acpi/default.sh 处理,但默认的/etc/acpi/default.sh 功能十分有限,必须自己修改。

配置Fn+Keys

这里已经有人写好了一些常用脚本,我根据他的内容整理了一份default.sh,目前可以处理Fn+F3(关屏), Fn+F4(Suspend to ram), Fn+F5(开关蓝牙), Fn+F6(开关wifi),Fn+F12(Suspend to disk) 。这个脚本会用到radeontool,如果系统没有这么命令,merge它(也可以使用xset,但需要自己更改default.sh)。

# emerge -av1 radeontool

另外,我注释了脚本中的xosd 命令,如果你有GUI 程序需要显示Fn控制程序的状态,那么可以去掉注释(需要merge xosd)

调试

共享一下调试Fn 组合键的方法,thinkpad_acpi 会将按键事件写入/proc/acpi/event,但acpid 运行时我们无法读取这个文件,先停掉服务:

# /etc/init.d/acpid stop

然后cat这个文件(确保module thinkpad_acpi 已经装载,或者内建在内核)

# cat /proc/acpi/event

接着按Fn 组合键,console 中会打印出事件条目,括号中是我的注释。default.sh 将解析这些条目,并调用不同的命令进行处理。

ibm/hotkey HKEY 00000080 00001001 (Fn+F1)
ibm/hotkey HKEY 00000080 00001002 (Fn+..)
ibm/hotkey HKEY 00000080 00001003
ibm/hotkey HKEY 00000080 00001004
ibm/hotkey HKEY 00000080 00001005
ibm/hotkey HKEY 00000080 00001006
ibm/hotkey HKEY 00000080 00001007
ibm/hotkey HKEY 00000080 00001008
ibm/hotkey HKEY 00000080 00001009
ibm/hotkey HKEY 00000080 0000100a
ibm/hotkey HKEY 00000080 0000100b
ibm/hotkey HKEY 00000080 0000100c (Fn+F12)
ibm/hotkey HKEY 00000080 00001018 (Access IBM)
ibm/hotkey HKEY 00000080 00001014 (Fn+Space)

在我这里,调整屏幕亮度、屏幕灯、音量几个按键thinkpad_acpi 似乎是捕获不到的,event 没有输出,但功能正常,是不是xmodmap 处理了?

另外,内核中还有一个ACPI Button 支持,如果编译为module,在rmmod thinkpad_acpi之后,并且已经装在button,诸如Fn+F4 的事件会被其捕获,同样写入/proc/acpi/event:

button/sleep SLPB 00000080 00000001
button/sleep SLPB 00000080 00000002

下载

使用default.sh 覆盖acpid 默认的文件/etc/acpi/default.sh 即可,/etc/acpi/events/default 不用更改。

更新 2008-04-09 

今天偶然发现hal (0.5.10)中已经包含全系列thinkpad 型号hotkey的policy 配置文件,包括最新的T/X 6系列,这个文件位于:/usr/share/hal/fdi/information/10freedesktop/30-keymap-module-thinkpad-acpi.fdi,对于T4  系列,有如下定义:

        <match key="/org/freedesktop/Hal/devices/computer:system.hardware.version" contains="T4">
<append key="input.keymap.data" type="strlist">0x02:screenlock</append> <!-- Fn+F3 lock -->
<append key="input.keymap.data" type="strlist">0x03:sleep</append> <!-- Fn+F4 suspend -->
<append key="input.keymap.data" type="strlist">0x04:radio</append> <!-- Fn+F5 switch radio -->
<append key="input.keymap.data" type="strlist">0x06:switchvideomode</append> <!-- Fn+F7 switch video output device -->
<append key="input.keymap.data" type="strlist">0x0b:suspend</append> <!-- Fn+F12 hibernate -->
<append key="input.keymap.data" type="strlist">0x0f:brightnessup</append> <!-- Fn+Home -->
<append key="input.keymap.data" type="strlist">0x10:brightnessdown</append> <!-- Fn+End -->
<append key="input.keymap.data" type="strlist">0x13:zoom</append> <!-- Fn+Space -->
<append key="input.keymap.data" type="strlist">0x17:vendor</append> <!-- ThinkPad/ThinkVantage button -->
<append key="info.capabilities" type="strlist">input.keymap</append>
</match> 

我猜想如果使用这个配置文件,应该可以免去上面手工配置Fn keys的步骤,或者不再使用/proc/acpi/event 这个interface,代之使用经由hal 提供的事件绑定?

尝试将其copy 至/etc/hal/fdi/policy 或者/usr/share/hal/fdi/policy/10osvendor,然后重启/etc/init.d/hald 服务,同时关闭了可能与其冲突的acpid 服务,但并没有预期的作用。查看lshal,似乎也都符合配置文件:

$ lshal |grep input.product 
  input.product = 'ThinkPad Extra Buttons'  (string)
...
$ lshal |grep system.hardware.vendor
  system.hardware.vendor = 'IBM'  (string)
$ lshal |grep system.hardware.version
  system.hardware.version = 'ThinkPad T43'  (string)

继续关注这个问题。

下面添加了一篇Gentoo 配置的参考文章。

延展阅读

Linux 支持鼠标、键盘即插即用

xorg-server-1.4 发布了有一段时间,配合hal-0.5.10 以及evdev-1.2 可以支持鼠标、键盘的即插即用(hotplug)。 上一次的evdev 升级允许在xorg.conf 中仅仅指定Device 名称即可,不需要指定Driver,xorg 会自动搜索合适的驱动程序,这一此更彻底,在xorg.conf 中不需要进行任何InputDevice 有关的设置。 如果升级到了以上版本,可以修改xorg.conf 来使用hotplug 功能,修改非常简单,移除所有的InputDevice Section...

xorg-server-1.4 发布了有一段时间,配合hal-0.5.10 以及evdev-1.2 可以支持鼠标、键盘的即插即用(hotplug)。

上一次的evdev 升级允许在xorg.conf 中仅仅指定Device 名称即可,不需要指定Driver,xorg 会自动搜索合适的驱动程序,这一此更彻底,在xorg.conf 中不需要进行任何InputDevice 有关的设置。

如果升级到了以上版本,可以修改xorg.conf 来使用hotplug 功能,修改非常简单,移除所有的InputDevice Section 和相关行即可。

Section "InputDevice"
...
EndSection
Section "ServerLayout"
...
InputDevice	"Trackpoint" "CorePointer"
InputDevice "Logitech MX1000" "SendCoreEvents"
InputDevice	"Externel USB Mouse" "SendCoreEvents"
InputDevice	"Generic Keyboard" "CoreKeyboard"
EndSection

移除之后,重启X,我的trackpoint、无线鼠标都工作得很好,甚至罗技的四向滚轮也可以正常驱动(仅仅横滚的方向弄反了:) )。

Xake 在这个讨论中对这次升级做了一些更详细的描述,同时也澄清了一些问题。在升级到这些版本之后,有些人遇到了Up键与PrintScreen键混在一起的情况,也包括我,尝试了Xake 的清空所有自定义属性 的方法,但不奏效。最终Disable 了PrintScreen 键,Up键恢复正常,等待fix。

一点题外话,在升级后,很多人遇到了类似的问题,并且抱怨xorg, evdev, 或是hal,Xake 很乐于帮助人们解决问题,但一再强调:

HAL is not the problem. DBUS is not the problem. xf86-input-evdev is not the problem. You configuration is the problem.

的确,如果希望使用最易用的linux,那么应该选择Ubuntu,而不是Gentoo,而遇到了以上问题,也是因为指定了允许升级不稳定版的关键字 ~arch:

ACCEPT_KEYWORDS="~x86"

每一次emerge --sync,看到成百上千的包更新,心里都会莫名的感动,理解Xake,想起几篇老文章,翻出来:

 

TestDisk 找回丢失的硬盘分区表

分区表丢失 早晨启动笔记本,被告知未找到操作系统,有点心惊,用Linux 启动U盘引导系统,查看我的主硬盘设备:fdisk -l /dev/sda ,找不到任何分区,应该是分区表丢了,原因不知道。 从前使用Windows 软件FinalData 恢复过被快速格式化甚至重新分过区的硬盘数据,于是把硬盘拆下,装在第二块硬盘托架内,借了台thinkpad,装了FanalData,但发现它只能恢复文件,不能恢复分区表,而且对Linux 分区数据也无能为力。 恢复分区表 在尝试易我分区表医生未果之后,Google到这篇文章: 介绍一个 GPL 的分区表修复工具 TestDisk...

分区表丢失

早晨启动笔记本,被告知未找到操作系统,有点心惊,用Linux 启动U盘引导系统,查看我的主硬盘设备:fdisk -l /dev/sda ,找不到任何分区,应该是分区表丢了,原因不知道。

从前使用Windows 软件FinalData 恢复过被快速格式化甚至重新分过区的硬盘数据,于是把硬盘拆下,装在第二块硬盘托架内,借了台thinkpad,装了FanalData,但发现它只能恢复文件,不能恢复分区表,而且对Linux 分区数据也无能为力。

恢复分区表

在尝试易我分区表医生未果之后,Google到这篇文章: 介绍一个 GPL 的分区表修复工具 TestDisk | BT的花,找到TestDisk,下载了Windows 版,先读了一遍Using TestDisk 下面的文档,然后开始对故障硬盘进行Analyse ,但经过Deeper Search 之后,仅仅找前三个主分区,位于Windows 扩展分区内的两个对我而言最重要的逻辑分区未找到。记起帮助文档中介绍 Geometry下面可以调整柱面(C)、磁道(H)、扇区(S)、扇区size(SS)等参数,目前设定为:9730、255、63、512,将Head修改为240 (柱面数没有进行修改,TestDisk会自动读取剩余的柱面,如果需要计算的话,SS 不变,应该满足:new_C=9730*255/240),再次执行Analyse,TestDisk读出了所有的分区信息!

使用p 命令可以列出每个分区上的文件,经过仔细确认,分区信息无误之后,执行写入分区表。

修复MBR grub

装回硬盘,启动,屏幕左上角出现了几个字母后停住,估计是MBR grub 损坏,从U盘引导,mount 主硬盘的/boot 分区,进入/boot/grub 目录,执行grub,重新写入主硬盘MBR:

# grub
grub> root (hd0,0)
grub> setup (hd0)
grub> quit 

 

再次硬盘启动成功,进入系统,所有分区数据访问正常。

后记

如果有分区表备份,在这种情况下,可以使用Linux fdisk 按照原来的起止柱面,直接建立原类型分区,数据也同样可以找到。

看来备份分区表很重要,可以添加这样一条命令到crontab,来备份最近7天的分区表信息(还应该有机制自动将备份文件mail 出去或者同步到移动存储器,也可以scp 到本地硬盘以外的主机):

00 12 * * * fdisk -l > ~/.pt_backup_$(date '+%Y%m%d'); find ~ -name ".pt_backup_*" -mtime +7 -exec rm -f {} \;

TestDisk Windows 版本在系统安装有cygwin 的情况下,启动出错,大概是因为系统中的cygwin1.dll 版本更新,删除了TestDisk 解压目录中的cygwin1.dll 之后可正常启动TestDisk。

为软件作者实现了一个在Amazon的wish: The Engines of God,为了省运费,使用了amazon.fr,不过还好有Google 语言工具

延展阅读

mysqld 启动失败一例

启动mysql server 失败,查看/var/log/mysqld.err 080329 16:01:29 [ERROR] Can't start server : Bind on unix socket: No...

启动mysql server 失败,查看/var/log/mysqld.err

080329 16:01:29 [ERROR] Can't start server : Bind on unix socket: No such file or directory
080329 16:01:29 [ERROR] Do you already have another mysqld server running on socket: /var/run/mysqld/mysqld.sock ?
080329 16:01:29 [ERROR] Aborting
080329 16:01:29  InnoDB: Starting shutdown...
080329 16:01:30  InnoDB: Shutdown completed; log sequence number 0 4646872
080329 16:01:30 [Note] /usr/sbin/mysqld: Shutdown complete

百思不得其解,后来查看/var/db/pkg/dev-db/mysql-5.0.56/CONTENTS 文件,或者执行equery f mysql(两种方法非Gentoo Linux 发布不适用),得知安装文件中包含/var/run/mysqld,而这个目录不存在,回忆起之前曾清空过/var/run目录,一直以为这下面的内容都是动态创建,删除之后重启系统即可,看来对mysql 来说还不是这么回事。

创建此目录,并chown,问题解决。

# mkdir /var/run/mysqld
# chown mysql:mysql /var/run/mysqld

DB2 connect 错误 SQLEUCCM: SQL0969N

DB2 v8.2 客户端连接任何DB2 Server出错: SQL0969N There is no message text corresponding to SQL error "-2079391743"...

DB2 v8.2 客户端连接任何DB2 Server出错:

SQL0969N  There is no message text corresponding to SQL error "-2079391743" in 
the message file on this workstation.  The error was returned from module 
"SQLEUCCM" with original tokens "".

事实上是,使用客户端instance owner 运行db2 connect 一切正常,当使用其它用户source instance owner 的db2profile 之后,运行db2 connect 出现以上错误,即使将此用户加入到instance owner 的group 也是同样错误。Google 到问题产生的原因: SQLEUCCM error message for DB2 - Coffee|Code : Dan Scott, Caffeinated Librarian Geek

我这里的原因与上文有点差别,我更改了客户端instance 的参数DFTDBPATH ,其默认在instance owner 的HOME,我将其更改为其它路径/db2,这个目录的owner为root,通过group db2授权给客户端instance owner,所有的数据库数据文件将被创建在这个目录下的子目录,子目录与instance owner 同名,虽然子目录完全属于instance owner,并且instance owner 也是其父目录/db2的group 成员(对group成员授与了完全权限),DB2 客户端还会要求似乎不需要的权限,并报出以上错误。

上面描述的情况有点混乱,简单概括一下:

  • DB2 v8.2 客户端instance owner and group: db2amor:db2amor (用户db2amor 也是group db2的成员)
  • DFTDBPATH 与权限: /db2 root:db2 770
  • instance 数据路径与权限: /db2/db2amor db2amor:db2amor 775

使用其它用户source db2amor 的db2profile 之后连接数据库出错,即使将其加入db2amor group 成员也不行。

我的解决方法与上文也有差别,我将需要使用DB2 客户端的用户加入DFTDBPATH 所属group: db2(不需要加入instance owner group: db2amor)

# usermod -aG db2 USER_NAME

产生前面的问题,是因为我使用了DB2 Server instance 中的客户端。其实有个更好的方法避免上述的问题,就是创建独立的DB2 客户端instance,无论是v8 还是v9,这就根本上避免了我们不希望的权限请求。

# /opt/IBM/db2/V8.1/instance/db2icrt -s client INSTANCE_NAME 

Gentoo Linux: /var/db/pkg 这个文件夹很重要!

前段时间折腾tmpfs 文件系统,不小心弄丢了/var/db/pkg 下面所有的文件,在查资料的过程中,才了解这个文件夹的重要。 这个文件夹对于Gentoo 的作用,相当于Windows 应用程序的Uninstall 文件,所有通过Portage 安装的程序包信息都保存在这,每个程序包包含哪些文件,以及文件的路径信息是最重要的,缺少这些信息,将无法正常的卸载程序包,其他一些重要的信息丢失也导致Portage 系统混乱。 这个文件夹丢失,虽然系统中的应用程序可以照常运行,但却是最大的灾难,除非不再打算通过Portage 对包进行任何维护工作,比如升级,安装新的软件等。解决方法只有一个:重新merge 所有软件包,重新生成这部分信息。一般来说,系统中软件包的规模在几百,甚至上千个,里面还有一些重磅角色,全部重新编译一遍,可能需要几十个小时(OpenOffice 在我的T43 上花去10个小时进行编译)。 文件夹丢失后,我最初找到了这个讨论(en),参考hielvc...

前段时间折腾tmpfs 文件系统,不小心弄丢了/var/db/pkg 下面所有的文件,在查资料的过程中,才了解这个文件夹的重要。

这个文件夹对于Gentoo 的作用,相当于Windows 应用程序的Uninstall 文件,所有通过Portage 安装的程序包信息都保存在这,每个程序包包含哪些文件,以及文件的路径信息是最重要的,缺少这些信息,将无法正常的卸载程序包,其他一些重要的信息丢失也导致Portage 系统混乱。

这个文件夹丢失,虽然系统中的应用程序可以照常运行,但却是最大的灾难,除非不再打算通过Portage 对包进行任何维护工作,比如升级,安装新的软件等。解决方法只有一个:重新merge 所有软件包,重新生成这部分信息。一般来说,系统中软件包的规模在几百,甚至上千个,里面还有一些重磅角色,全部重新编译一遍,可能需要几十个小时(OpenOffice 在我的T43 上花去10个小时进行编译)。

文件夹丢失后,我最初找到了这个讨论(en),参考hielvc 写的脚本,希望通过读取/var/log/emerge.log 恢复丢失的信息,但这个方法只能恢复出系统中所有已安装软件包名称和版本信息,无法找回已安装文件的列表,能不能通过某个Gentoo 工具得到每个软件包默认的文件列表呢,答案应该是不可以,因为Gentoo 是一个定制性的系统,大部分文件都是编译后生成的,并没有一个默认的库能够告诉这些文件的具体信息。换句话说,我的/var/db/pkg 是唯一的,如果没有备份,只能重新编译一遍系统来生成它们,下面这个讨论中,didymos很清楚的解释了这个问题,也证实了我的想法:PANIC! I deleted /var/db/pkg

所幸,在把我的/var/db/pkg 放入内存之前,我留下一个备份,但随后,我merge了约50个软件包,这些信息被写入内存中的/var/db/pkg ,随后就在一次重启后彻底丢失了。

在具有备份的情况下,我使用以下步骤重建了/var/db/pkg,时间成本主要花费在重新merge 约50个软件包。

步骤

恢复备份的/var/db/pkg 文件夹

恢复之后,/var/db/pkg 代表了merge 50个包之前我的系统的状况,但我的系统实际多出了一些包,或者一些已存在包的升级。

找出/var/db/pkg 与实际系统的不一致

前面提到的hielvc 写的脚本可以派上用场,但hielvc 忽略了一些情况(emerge -> unmerge -> emerge again),结果可能并不准确,我重写了一个脚本rebuildpkgdb,用法:

# ./rebuildpkgdb -p
This is a dry-run, Nothing really changed.
Done! Please check package.lst

这将得到系统中实际安装的所有包列表(包含版本),再使用下面命令获取/var/db/pkg 记录的列表。

#  find /var/db/pkg/ -type d |cut -d/ -f 5- |awk -F/ 'NF > 1' |sort > package.db

然后比较两个文件,找到以下包:

  1. 存在于package.lst,但不存在于package.db
  2. 存在于package.db,但不存在于package.lst
  3. 都存在,但版本不同(取 package.lst)

对于第一种情况,是因为我在/var/db/pkg 丢失之后,unmerge 了一些包,虽然emerge.log 显示unmerge 成功,但因为丢失/var/db/pkg,实际文件并没有从文件系统真正删除。

而后两种情况是我备份/var/db/pkg 之后,丢失的信息。

因此对于上面三种情况,都执行一次merge 即可。

remerge

将上个步骤取得的包列表格式化成类似下面的命令,重新merge一遍,这个过程将重建正确的/var/db/pkg。

# sudo emerge -av =app-admin/eselect-ctags-1.3 =app-admin/eselect-wxwidgets-0.8 =app-admin/sudo-1.6.9_p14 =app-editors/emacs-22.1-r3 ...
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild  N    ] sys-fs/mtools-3.9.10  USE="X" 0 kB 
[ebuild     U ] kde-base/kpdf-3.5.9 [3.5.8] USE="xinerama -arts -debug -kdeenablefinal" 0 kB 
[ebuild     U ] kde-misc/krusader-1.80.0-r1 [1.80.0] USE="xinerama -arts -debug -javascript -kde" 0 kB 
[ebuild  N    ] sys-boot/syslinux-3.52  0 kB  
...
Total: 49 packages (42 upgrades, 6 new, 1 in new slot), Size of downloads: 3 kB
Would you like to merge these packages? [Yes/No] 
检查系统

列出那些在/usr/lib/portage/world,但不在/var/db/pkg 中的软件包:

# emaint --check world 

如果上面命令找到了任何包,那么应该先merge 它们,如果事实不需要它们,再进行unmerge ,这样可以保证world, /var/db/pkg/, 以及文件系统三者的一致性。

revdep-rebuild

最后执行revdep-rebuild 查找系统中的任何共享库以及依赖关系的缺失,如果需要,会自动merge 需要的软件包。这个命令可能需要运行多次,直到没有任何问题发现为止。

# revdep-rebuild 

如果没有/var/db/pkg 备份

这是个很不幸的状况,如果真正希望world, /var/db/pkg/, 以及文件系统这三者具有一致性,那么似乎没有别的选择,找个空闲时间依次执行下面的命令,来重建/var/db/pkg

# emaint --check world
# emerge -e system
# emerge -e world
# revdep-rebuild 

这个过程可能很漫长,视机器的速度,如果有其他Gentoo 系统可以利用,那么可以尝试分布式编译来节省时间。 

延展阅读

Gentoo Linux: Subversion

安装 添加需要的USE 标记:(如果愿意加入到/etc/make.conf 中作为全局配置也可以) # echo 'dev-util/subversion svnserve apache2' >> /etc/portage/package.use emerge subversion 服务器与客户端程序: # emerge...

安装

添加需要的USE 标记:(如果愿意加入到/etc/make.conf 中作为全局配置也可以)

# echo 'dev-util/subversion svnserve apache2' >> /etc/portage/package.use

emerge subversion 服务器与客户端程序:

# emerge subversion
[ebuild   R   ] dev-util/subversion-1.4.6-r1  USE="apache2 berkdb emacs java nls perl python ruby svnserve* -bash-completion -debug -doc -extras -nowebdav -vim-syntax" 0 kB  

注意:subversion 依赖于apache 服务,如果系统中没有apache,会自动添加入emerge 列表。

安装好后产生以下主要的文件:

/usr/bin/svnadmin   		用于建立一个repository,也就是一个svn版本库服务
/usr/bin/svn   			svn客户端命令行程序
/etc/init.d/svnserve		svn后台服务程序
/etc/conf.d/svnserve    	svn服务配置文件

配置

默认的配置文件使用/var/svn 作为repository 的根目录,不做修改。

使用root 建立/var/svn 目录,然后建立独立的repository目录: prj。

# mkdir /var/svn
# mkdir /var/svn/prj

现在使用前面创建的路径建立一个repository。

# svnadmin create /var/svn/prj 

这会生成一些目录结构与文件在/var/svn/prj 下面,编辑配置文件/var/svn/prj/conf/passwd,加入svn 授权连接用户与密码。

myusername - mypassword 

接下来编辑repository配置文件/var/svn/prj/conf/svnserve.conf,去除掉以下行的注释:

anon-access = read
auth-access = write
password-db = passwd

注意:行首不要留有空格。 

下面还需要给svn root 目录/var/svn 以及下面的repository 正确的授权,以使以apache用户运行的svnserver 能够正确的存取它们。执行以下命令:
# chown -R apache:root /var/svn 

 现在repository 已经准备好了,可以启动svn 服务,并设置为跟随系统自动启动。

# /etc/init.d/svnserve start
# rc-update add svnserve default 

至此,svn server已经在运行,并且为一个叫做prj的项目建立了一个repository,同时为这个repository设置了连接用户。

下面我们选择一个路径作为保存working copy 的目录,比如位于$HOME ,进入此目录,并首先将prj 项目check out,执行以下命令:

$ cd $HOME
$ svn checkout svn://localhost/prj

第一次执行此命令,svn会提示输入用户名与密码,然后保存在$HOME/.subversion 目录中。以上会在HOME 中目录建立目录$HOME/prj ,并包含$HOME/prj/.svn 用于保存版本控制的文件。

现在可以向$HOME/prj 中copy 项目文件。使用svn add PATH 命令加入版本控制信息,svn -m "message" commit PATH 命令进行提交。

参考信息

IBM HTTP Download - ibmdl tool

如果经常使用ibm.com或者w3 的HTTP Download 功能,下面的脚本可能会有用,在ibm.com下载的文件名称很多都是采用编码方式,下载得多了从名字很难区分文件内容,一种方法是在IBM HTTP Download 的applet 查看历史记录,另外一种是直接查看IBM HTTP Download 自动维护的dlmgr.pro 文件,这个文件一般与下载文件位于相同的目录。 写了一个简单的脚本ibmdl ,用于列出dlmgr.pro,也可以查询一个文件名,给出内容描述 $...

如果经常使用ibm.com或者w3 的HTTP Download 功能,下面的脚本可能会有用,在ibm.com下载的文件名称很多都是采用编码方式,下载得多了从名字很难区分文件内容,一种方法是在IBM HTTP Download 的applet 查看历史记录,另外一种是直接查看IBM HTTP Download 自动维护的dlmgr.pro 文件,这个文件一般与下载文件位于相同的目录。

写了一个简单的脚本ibmdl ,用于列出dlmgr.pro,也可以查询一个文件名,给出内容描述

$ ibmdl
Usage: ibmdl path [FILE]
Example: 
List all content in ./download/dlmgr.pro :
ibmdl ./download
Query C541WML.tar in ./download/dlmgr.pro :
ibmdl ./download C541WML.tar

Download file

Gentoo Linux on T43 总结:环境与配置文件

这篇笔记将集中给出一些系统中的环境设置与配置文件,有些配置文件在前面可能有所提及,有些并未涉及到,算作对前面内容的总结和补充。 环境  $ emerge --info  Portage 2.1.3.18 (default-linux/x86/2007.0, gcc-4.2.2, glibc-2.6.1-r0, 2.6.23-gentoo i686) ================================================================= System uname:...

这篇笔记将集中给出一些系统中的环境设置与配置文件,有些配置文件在前面可能有所提及,有些并未涉及到,算作对前面内容的总结和补充。

环境 

$ emerge --info 
Portage 2.1.3.18 (default-linux/x86/2007.0, gcc-4.2.2, glibc-2.6.1-r0, 2.6.23-gentoo i686)
=================================================================
System uname: 2.6.23-gentoo i686 Intel(R) Pentium(R) M processor 2.00GHz
Timestamp of tree: Mon, 05 Nov 2007 13:20:01 +0000
app-shells/bash:     3.2_p17-r1
dev-java/java-config: 1.3.7, 2.1.2-r1
dev-lang/python:     2.5.1-r3
sys-apps/baselayout: 1.12.10-r5
sys-apps/sandbox:    1.2.18.1-r2
sys-devel/autoconf:  2.13, 2.61-r1
sys-devel/automake:  1.9.6-r2, 1.10
sys-devel/binutils:  2.18-r1
sys-devel/gcc-config: 1.4.0-r1
sys-devel/libtool:   1.5.24
virtual/os-headers:  2.6.23
ACCEPT_KEYWORDS="x86 ~x86"
CBUILD="i686-pc-linux-gnu"
CFLAGS="-Os -march=pentium-m -pipe"
CHOST="i686-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/kde/3.5/env /usr/kde/3.5/share/config /usr/kde/3.5/shutdown /usr/share/X11/xkb /usr/share/config"
CONFIG_PROTECT_MASK="/etc/env.d /etc/env.d/java/ /etc/gconf /etc/revdep-rebuild /etc/splash /etc/terminfo /etc/udev/rules.d"
CXXFLAGS="-Os -march=pentium-m -pipe"
DISTDIR="/usr/portage/distfiles"
FEATURES="distlocks metadata-transfer sandbox sfperms strict unmerge-orphans userfetch"
GENTOO_MIRRORS="http://ftp.ncnu.edu.tw/Linux/Gentoo/     http://distro.ibiblio.org/pub/linux/distributions/gentoo/     http://ftp.ucsb.edu/pub/mirrors/linux/gentoo/"
LANG="en_US"
LINGUAS="en zh zh_CN"
MAKEOPTS="-j3"
PKGDIR="/usr/portage/packages"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --delete-after --stats --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --filter=H_**/files/digest-*"
PORTAGE_TMPDIR="/var/tmp"
PORTDIR="/usr/portage"
PORTDIR_OVERLAY="/usr/local/portage"
SYNC="rsync://rsync.asia.gentoo.org/gentoo-portage"
USE="X a52 aac aalib acl acpi alsa apache2 asf avahi avi berkdb bitmap-fonts bluetooth bzip2 cdparanoia cdr cjk cli console cracklib crypt cups dbus divx4linux dri dv dvd dvdr dvdread emacs encode esd exif ffmpeg firefox flac foomatic fortran gdbm gif glitz gnome gphoto2 gpm gstreamer gtk hal hdaps iconv immqt-bc irda isdnlog java jpeg lame live mad madwifi midi mjpeg mmx mp3 mp4 mpeg msn mudflap mysql ncurses nls nptl nptlonly nsplugin ogg opengl openmp oss pam pcre pda pdf perl png ppds pppd python qq quicktime rar readline real reflection ruby session sound spell spl sse sse2 ssl svg symlink tcpd tiff truetype truetype-fonts type1 type1-fonts unicode usb userlocales vcd vidix vorbis wav win32codecs wmv x86 xcb xine xinerama xml xorg xv xvid zip zlib" ALSA_CARDS="intel8x0" ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mulaw multi null plug rate route share shm softvol" ELIBC="glibc" INPUT_DEVICES="keyboard evdev mouse synaptics" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LINGUAS="en zh zh_CN" USERLAND="GNU" VIDEO_CARDS="radeon vesa"
Unset:  CPPFLAGS, CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LC_ALL, LDFLAGS, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS 
$ set 
ANT_HOME=/usr/share/ant-core
BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="3" [1]="2" [2]="17" [3]="1" [4]="release" [5]="i686-pc-linux-gnu")
BASH_VERSION='3.2.17(1)-release'
CLASSPATH=/home/db2amor/sqllib/java/db2java.zip:/home/db2amor/sqllib/java/db2jcc.jar:/home/db2amor/sqllib/java/sqlj.zip:/home/db2amor/sqllib/function:/home/db2amor/sqllib/java/db2jcc_license_cisuz.jar:/home/db2amor/sqllib/java/db2jcc_license_cu.jar:.
COLORTERM=gnome-terminal
COLUMNS=152
CONFIG_PROTECT='/usr/share/X11/xkb /usr/kde/3.5/share/config /usr/kde/3.5/env /usr/kde/3.5/shutdown /usr/share/config'
CONFIG_PROTECT_MASK='/etc/env.d/java/ /etc/udev/rules.d /etc/gconf /etc/terminfo /etc/revdep-rebuild /etc/splash'
CVS_RSH=ssh
DB2INSTANCE=db2amor
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-S9K8WiCEnf,guid=d7447ddfa94cec100759df0047da3397
DIRSTACK=()
DISPLAY=:0.0
EDITOR=/usr/bin/emacs
EUID=1000
FLTK_DOCDIR=/usr/share/doc/fltk-1.1.7-r2/html
GCC_SPECS=
GDK_USE_XFT=1
GENERATION=2
GNOME_DESKTOP_SESSION_ID=Default
GNOME_KEYRING_SOCKET=/tmp/keyring-HarWwA/socket
GROUPS=()
GTK_IM_MODULE=scim
GTK_RC_FILES=/etc/gtk/gtkrc:/home/alex/.gtkrc-1.2-gnome2
G_BROKEN_FILENAMES=1
HISTFILE=/home/alex/.bash_history
HISTFILESIZE=500
HISTSIZE=500
HOME=/home/alex
HOSTTYPE=i686
HUSHLOGIN=FALSE
IFS=$' \t\n'
INFOPATH=/usr/share/info:/usr/share/binutils-data/i686-pc-linux-gnu/2.18/info:/usr/share/gcc-data/i686-pc-linux-gnu/4.2.2/info:/usr/share/info/emacs-22
JAVAC=/home/alex/.gentoo/java-config-2/current-user-vm/bin/javac
JAVA_HOME=/home/alex/.gentoo/java-config-2/current-user-vm
JDK_HOME=/home/alex/.gentoo/java-config-2/current-user-vm
KDEDIRS=/usr:/usr/local:/usr/kde/3.5
LANG=en_US
LC_CTYPE=zh_CN
LD_LIBRARY_PATH=/opt/ibm-jdk-bin-1.4.2.9/bin:/opt/ibm-jdk-bin-1.4.2.9/jre/bin:/home/db2amor/sqllib/lib
LESS='-R -M --shift 5'
LESSOPEN='|lesspipe.sh %s'
LIBPATH=/home/db2amor/sqllib/lib
LINES=51
LOGNAME=alex
LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:su=37;41:sg=30;43:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.pdf=00;32:*.ps=00;32:*.txt=00;32:*.patch=00;32:*.diff=00;32:*.log=00;32:*.tex=00;32:*.doc=00;32:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:'
MACHTYPE=i686-pc-linux-gnu
MAIL=/var/mail/alex
MAILCHECK=60
MANPATH=/home/alex/.gentoo/java-config-2/current-user-vm/man:/usr/local/share/man:/usr/share/man:/usr/share/binutils-data/i686-pc-linux-gnu/2.18/man:/usr/share/gcc-data/i686-pc-linux-gnu/4.2.2/man:/etc/java-config/system-vm/man/:/usr/kde/3.5/share/man:/usr/qt/3/doc/man
OPENGL_PROFILE=xorg-x11
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PAGER=/usr/bin/less
PATH=/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/i686-pc-linux-gnu/gcc-bin/4.2.2:/opt/mts-client:/opt/mts:/opt/ibm-jdk-bin-1.4.2.9/bin:/opt/ibm-jdk-bin-1.4.2.9/jre/bin:/usr/kde/3.5/bin:/usr/qt/3/bin:/usr/games/bin:/home/alex/bin:/home/alex/foo:/home/alex/foo/order:/home/db2amor/sqllib/bin:/home/db2amor/sqllib/adm:/home/db2amor/sqllib/misc:/home/alex/bin:/home/alex/foo:/home/alex/foo/order
PIPESTATUS=([0]="2")
PKG_CONFIG_PATH=/usr/qt/3/lib/pkgconfig
PPID=7553
PRELINK_PATH_MASK=/usr/lib/gstreamer-0.10:/usr/lib/klibc
PYTHONPATH=/usr/lib/portage/pym
QMAKESPEC=linux-g++
QTDIR=/usr/qt/3
QT_IM_MODULE=scim
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
SHLVL=3
SSH_AGENT_PID=7403
SSH_AUTH_SOCK=/tmp/ssh-VHqDnq7373/agent.7373
TERM=xterm
USER=alex
VMHANDLE=ibm-jdk-bin-1.4
VWSPATH=/home/db2amor/sqllib
VWS_LOGGING=/home/db2amor/sqllib/logging
VWS_TEMPLATES=/home/db2amor/sqllib/templates
WINDOWID=20980933
WINDOWPATH=7
XAUTHORITY=/home/alex/.Xauthority
XDG_DATA_DIRS=/usr/share:/usr/kde/3.5/share:/usr/local/share
XDG_SESSION_COOKIE=
XMODIFIERS=@im=SCIM

配置文件

后记

这篇笔记不会是这个系列的最后一篇,因为有些部分自己还没有整理清楚,待合适的时候,将继续更新。

延展阅读

Google Reader 移动版连续后退中文乱码,Solved

环境:多普达D700,Windows Mobile 5.0,IE。 在 Google Reader 中浏览订阅内容时,经常会用到后退按钮,在连续2次后退之后,页面中的中文变为乱码,需要重新刷新页面才能解决,我一直以来避免连续后退两次这样的操作,今天查看了一下IE Options 中的字符集设置,默认使用简体中文Chinese Simplified (GB2312),将其更改为Unicode (UTF-8) 问题得到解决。 顺便我尝试了Google 手机地图中国版(Google...

环境:多普达D700,Windows Mobile 5.0,IE。

Google Reader 中浏览订阅内容时,经常会用到后退按钮,在连续2次后退之后,页面中的中文变为乱码,需要重新刷新页面才能解决,我一直以来避免连续后退两次这样的操作,今天查看了一下IE Options 中的字符集设置,默认使用简体中文Chinese Simplified (GB2312),将其更改为Unicode (UTF-8) 问题得到解决。

顺便我尝试了Google 手机地图中国版(Google China Maps) 1.7.1,通过本地网络接入互联网,速度很快,几分钟的浏览就cache 了1MB的数据,这也说明它会很轻松的突破大多数人使用的GPRS 5MB/10MB 套餐的流量,提醒大家在使用GPRS 连接时要慎重。

如果您正在使用PDA ,可以直接下载安装: Windows Mobile 手机用户 | Symbian S60 第3版 手机用户

IBM DB2 信息中心 v8.2 在Gentoo Linux 上安装的一些问题

Gentoo 支持 IBM DB2 信息中心 并不提供对Gentoo Linux 的额外支持,如果使用Gentoo,在以下几个地方,需要额外的工作。 rpm DB2 信息中心安装文件内部使用rpm 包,Gentoo 默认没有rpm 引擎,需要先emerge rpm,否则安装无法继续。 #...

Gentoo 支持

IBM DB2 信息中心 并不提供对Gentoo Linux 的额外支持,如果使用Gentoo,在以下几个地方,需要额外的工作。

rpm

DB2 信息中心安装文件内部使用rpm 包,Gentoo 默认没有rpm 引擎,需要先emerge rpm,否则安装无法继续。

# emerge -av rpm 

信息中心自v9.1 版本,使用tar包,不再需求rpm。

服务daemon 不会自动启动

安装脚本使用Redhat Linux 发布的chkconfig 命令来为Linux 环境设置自动启动daemon,Gentoo 不支持,需要手工配置。

# rc-update add db2icd default 
安装中文帮助文档包

命令行安装仅仅安装基本的英文版本,如果需要中文,手工运行:

# rpm -ivh --nodeps db2/linux/IBM_db2decn81-8.1.0-64.i386.rpm 

繁体中文:IBM_db2detw81-8.1.0-64.i386.rpm 

Truableshooting

GUI安装:Installing DB2 file sets:.......Failure

图形安装方式运行:

# ./db2setup

启动了图形安装界面,services name 和端口使用默认值:db2icserver, 51000,最后一步安装失败,/tmp/db2setup.log 如下:

DB2 Setup log file started at: Sat 01 Mar 2008 01:43:06 AM CST CST
============================================================
Operating system information: Linux 2.6.23-gentoo.#7 PREEMPT Tue Nov 6 17:01:35 CST 2007 i686
Product to install:                        IBM DB2 Information Center
Installation type:                         Custom
Previously Installed Components:        
Selected Components:                    
Languages:                              
Target directory:                          /opt/IBM/db2/V8.1
Space required:                            0 MB
DB2 Information Center Server settings: 
Service Name:                          db2icserver
Port number:                           51000
Checking license agreement acceptance:.......Success
Installing DB2 file sets:.......Failure
ERROR:A major error occurred while installing "IBM DB2 Information Center" on 
this computer. The installation can not continue. If the problem persists 
please contact your technical service representative.
DB2 Setup log file finished at: Sat 01 Mar 2008 01:47:33 AM CST CST
============================================================ 

尚不知如何解决。

命令行安装:error: Failed dependencies:       /opt/IBM/db2/V8.1 is needed by IBM_db2deen81-8.1.0-64.i386

执行命令行安装:

# cd ./261_DOCE_LNX_3264_NLV
# ./db2_install -p DB2.DOCE

提示错误:

   IBM_db2deen81...
error: Failed dependencies:
        /opt/IBM/db2/V8.1 is needed by IBM_db2deen81-8.1.0-64.i386
The installation logfile can be found in /tmp/db2_install_log.16033.
db2_install program terminated prematurely.

这是rpm 包的依赖问题,具体原因不清楚。

临时解决方法:

修改安装目录的文件 261_DOCE_LNX_3264_NLV/db2/linux/db2_install ,573行,为rpm 命令增加参数--nodeps。
573              ( rpm -ivh --nodeps ${INSTDEV?}/${pkg?}${RPMEXTN?} 2>&1; echo $? > ${TMPRC?} ) | tee -a ${DB2INSTLOG?}
服务端口冲突

如果在系统中安装了多个版本的信息中心,比如同时安装了v8 与v9,那么可能需要考虑以下问题。

信息中心v8 版本的命令行安装脚本不能自动配置服务端口,总是使用默认值51000,可能会与其它版本的信息中心引起冲突(比如在安装v8版本之前安装了v9),需要手工修改 /var/db2/v81/db2icd.conf,挑选一个未被占用的端口,这里使用51002。

## TCP/IP port for DB2 Information Center
DB2_ECLIPSEIC_PORT=51002
## Temporary workspace file location for DB2 Information Center
## Default location is DB2 install location (<DB2DIR>/doc/eclipse)
DB2_ECLIPSEIC_DATA=
## Suggested alternate location 
#DB2_ECLIPSEIC_DATA=/tmp/db2icd/workspace
DB2HELP_DIR=/opt/IBM/db2/V8.1/bin/../doc/eclipse

注意,/opt/IBM/db2/V8.1/cfg/db2ic.conf  是个类似的配置文件,但/etc/init.d/db2icd 并没有使用它,使用的是/var/db2/v81/db2icd.conf。

启动服务失败:su: error while loading shared libraries: libcrypt.so.1: cannot open shared object file: No such file or directory

启动服务,输出大量的错误信息,100秒超时后,启动失败。

# /etc/init.d/db2icd start
Initializing startup.
su: error while loading shared libraries: libcrypt.so.1: cannot open shared object file: No such file or directory
ps: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
grep: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
awk: error while loading shared libraries: libdl.so.2: cannot open shared object file: No such file or directory
grep: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
ps: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
awk: error while loading shared libraries: libdl.so.2: cannot open shared object file: No such file or directory
sleep: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
expr: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
./db2icd: line 204: [: : integer expression expected
... 

此问题由daemon脚本使用的Java 虚拟机版本和内核环境参数引起。

/etc/init.d/db2icd 使用安装程序自带的Java虚拟机,版本为1.3.1。

# /opt/IBM/db2/V8.1/doc/eclipse/jre/bin/java -version
java version "1.3.1"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1)
Classic VM (build 1.3.1, J2RE 1.3.1 IBM build cxia32131-20031021 (JIT enabled: jitc))

/etc/init.d/db2icd 为Linux 环境设置了内核环境参数。

LD_ASSUME_KERNEL=2.4.19
export LD_ASSUME_KERNEL 

完成下面2个步骤可以解决问题:

  1. 修改daemon脚本,更换为系统的Java虚拟机
  2. 修改daemon脚本,取消内核环境参数 LD_ASSUME_KERNEL

我的系统中安装两个版本的Java 环境,经测试,任何一个都可以,关于如何切换Java 环境版本,可参考 Gentoo Linux on T43 (12) Java 环境

# java-config -L
The following VMs are available for generation-2:
*)      IBM JDK 1.4.2.9 [ibm-jdk-bin-1.4]
2)      IBM JDK 1.5.0.5a [ibm-jdk-bin-1.5] 

我的内核版本是2.6.23-gentoo:

# uname -svr
Linux 2.6.23-gentoo #7 PREEMPT Tue Nov 6 17:01:35 CST 2007

两处代码更改如下: 

# diff /etc/init.d/db2icd /etc/init.d/db2icd.bak
76,77c76
< #     DB2HELP_JRE="$DB2HELP_DIR/jre/bin/java"
<       DB2HELP_JRE="java"
---
>       DB2HELP_JRE="$DB2HELP_DIR/jre/bin/java"
195,196c194,195
<              #LD_ASSUME_KERNEL=2.4.19
<              #export LD_ASSUME_KERNEL
---
>              LD_ASSUME_KERNEL=2.4.19
>              export LD_ASSUME_KERNEL 

通过http://localhost:51002 访问DB2 Information Center v8.2 成功。

安装路径与卸载问题 

DB2 数据库v8 版本安装不允许修改安装路径/opt/IBM/db2/V8.1/(Solaris 平台除外),同样,信息中心v8 也是如此,虽然其安装脚本db2_install 具有-d 参数,但指定安装目录无效,无论如何都安装在默认目录/opt/IBM/db2/V8.1,会与DB2 数据库v8 混在一起,如果执行Information Center 的卸载程序db2_deinstall,也会将DB2 数据库v8 一并卸载掉,这点需要特别注意。

如果意外卸载了DB2 数据库 v8,用原有的选项重新安装即可,无须重新创建或者修改实例。

backup 地球

挪威人为地球的农作物做了一个”全备份 “,放在北极圈内斯瓦尔巴群岛上新修建的“诺亚方舟”,备份的内容是种子,目的是一旦地球环境遭到毁灭性破坏,在基本的生存要素得到恢复后,比如阳光、温度、水、大气,再把种子拿出来重建粮农作物物种,解决人们的饥饿问题。 前些年,人们担心过不小心闯入地球轨道的天体,现在,人们认识到这种威胁更可能来自人类自己,这个灾备系统的安全系数也不断得到升级。人们可以把信息备份到各式各样的存储器中,可以把植物种子备份到北极地下,甚至备份了生物(包括人类自己)的DNA 也可以在灾难后恢复出现有的物种,可是海洋、大气、整个地球的环境却没法备份,如果人类一直都不需要启动这个种子的诺亚方舟,有一天,或许可以在超级电脑上敲入下面的命令: # db2 backup planet Earth to Mars 升级版本大概需要做: # db2 backup...

挪威人为地球的农作物做了一个”全备份 “,放在北极圈内斯瓦尔巴群岛上新修建的“诺亚方舟”,备份的内容是种子,目的是一旦地球环境遭到毁灭性破坏,在基本的生存要素得到恢复后,比如阳光、温度、水、大气,再把种子拿出来重建粮农作物物种,解决人们的饥饿问题。

前些年,人们担心过不小心闯入地球轨道的天体,现在,人们认识到这种威胁更可能来自人类自己,这个灾备系统的安全系数也不断得到升级。人们可以把信息备份到各式各样的存储器中,可以把植物种子备份到北极地下,甚至备份了生物(包括人类自己)的DNA 也可以在灾难后恢复出现有的物种,可是海洋、大气、整个地球的环境却没法备份,如果人类一直都不需要启动这个种子的诺亚方舟,有一天,或许可以在超级电脑上敲入下面的命令:

# db2 backup planet Earth to Mars

solar system

升级版本大概需要做:

# db2 backup planet Earth to M42@Orion 

扯远了,还是祝愿这个种子备份永远也不会被用到吧。如果那一天真的来了,也希望人们有机会执行恢复的进程,并且能熬过那个漫长的前滚恢复。