Ubuntu 下移动 /var 目录到单独分区后出现的一些问题,如:mount: special device /var/run does not exist

前几天,我的Ubuntu 6.06 LTS 的 / 分区空间紧张,于是把 /var 目录移动另一个分区。偶然一次,在没有挂载 /var 分区的情况下,发现原来根分区 / 下的 /var 目录仍然有 /var/run 和 /var/lock 目录,以为这是重复的,就顺手把根分区 / 下面的 /var/run 和 /var/lock 目录删除了。

后来,问题就出来了:包括网络不能启动,ADSL 不能自动连接;Wine 的 QQ 登录后停止响应;图形界面常常停止响应,像死机,只能 CTRL+ALT+BACKSPACE 重启图形界面,等等。然后是,启动信息里出现如下一些文字:
Can't create directory "/var/run/network"
mount: special device /var/run does not exist
mount: wrong fs type, bad option, bad superblock on /dev/shm/var.run
等等

先还以为是移动 /var 目录到新的分区时,也许无意中把目录的权限修改了,对照机子上的 DeLi Linux检查了一下,移动后的目录权限应该没有什么问题。后来,甚至怀疑是用“sudo apt-get upgrade”命令更新了系统的原因。最后,上网在Google上用关键字“mount: special device /var/run does not exist”搜索资料,在 mount: special device /var/run does not exist 上找到答案,原来,不管你的 /var 目录在不在单独的分区里,/var/run 和 /var/lock 这两个目录一定要在根分区 / 里面!

然后,我从机子上的另一个 linux (Puppy Linux)启动系统,在 Ubuntu 6.06 LTS 根分区 / 下添上了两个目录: /var/run 和 /var/lock 就一切OK 了。

所以,我要把网络这个便利的工具充分运用起来,在一些实际的应用性问题上,自己经过适度的思考和尝试解决,失败后,就应该利用搜索引擎这个便利的工具了;如果还不能解决的话,就可以上论坛和等场所向别人请教了。当然,一些基础的知识平时就要主动的掌握。

在Ubuntu 6.06 下安装305(sn9c110,0c45:612a)摄像头的经历

上周,我试着在我用的Ubuntu 6.06的机器上安装305摄像头。下面记录一些经历,供备忘和朋友参考。

实际上,我没有把这个摄像头安装成功,但是我也知道问题的所在了。

我这个摄像头用lsusb命令显示为:Bus 001 Device 003: ID 0c45:612a Microdia

在windows下安装随带的305驱动,识别为SN9C110摄像头。

1)、根据网上google的结果,尝试安装gspcav1-20070508。最后根据这篇文章:
UbuntuHelp:Spca5xx才编译成功, 网上有点文章介绍的方法往往丢了关键的一个步骤:
ln -s /usr/src/linux-headers-`uname -r` /lib/modules/`uname -r`/build
在我的机器上,即建立一个到/usr/src/linux-headers-2.6.15-23-386 的软链接: /lib/modules/2.6.15-23-386/build
安装完成了,可是在安装的撮像头软件camorama里测试,撮像头还是不能工作。一看源文件里的README文件,原来这款0c45:612a 没有被这个驱动支持。查看了一些资料,想通过修改源码来安装,结果没有成功,这款摄像头在windows下识别为SN9C110,可我在 http://www.sonix.com.tw/sonix/family.do?f=3 下查了一下,没有这款产品的数据了。而在网上链接到这个网站关于sn9c110 的资料好像原来是应该有的。后来,我把摄像头拆开,查看它的芯片型号,芯片上写的是305,还有其它一组字符串,忘了。我想得到相关参数来试着修改源码,结果也没有成功。

2)、尝试升级内核解决这个驱动问题

用文章如何编译一个内核 - Ubuntu方式-xxlinux.com介绍的方法编译的(2.6.24.3)内核不能引导系统,也不知是不是跨度有点大的原因,后来,我没有用文章中介绍的“Ubuntu方式”,而直接用内核源代码里README介绍的通用的内核编译方式编译安装了内核,发现还是不能启动,安装了一个initrd-tools包,用mkinitrd命令做了一个initrd.img-2.6.24.3 文件放在 /boot,修改了/boot/grub/menu.lst新内核才启动成功。结果,新内核里也没有支持这款撮像头的驱动。

3)、安装sn9cxxx的闭源驱动

在网上查了, http://www.linux-projects.org/ 上说他的驱动支持SN9C110,下载了试用版本,结果是Ubuntu 发行版的版本不一致用不了,他上面是用于7.04和7.10的。而我也不是要用这个摄像头,在 linux 安装摄像头只是试验一下而已,也暂时没有升级Ubuntu的打算。所以,我在Ubuntu下安装305(sn9c110,0c45:612a)摄像头就最终以暂停结束。

另外,我看到网上也有一些朋友的这种摄像头在linux没有安装成功。谁知道这种摄像头在linux下的安装方法还请说一下哦。

Ubuntu 6.06 LTS 上挂载fat32分区和ext2分区的一些测试

这篇日记记录在Ubuntu 6.06 LTS 上挂载fat32分区和ext2分区,测试系统umask值和mount fat32分区中的umask、dmask、fmask等参数的用法,并测试在 gnome nautilus 中创建目录、文件和在控制台下创建目录、文件的情况。

一、在Ubuntu 6.06 LTS 挂载Windows XP SP2下的fat32分区:

Ubuntu下是使用的 zh_CN.UTF-8 的locale,使用下面的命令挂载fat32分区:

sudo mount -t vfat -o iocharset=utf8,umask=022,gid=1000,uid=1000 /dev/hda1 /media/xp

这样,可以正确显示windows下中文目录(文件)名,在 Ubuntu 下创建的中文目录(文件)名在windows下也可以正常显示。奇怪的是,就算是登录gnome时选择了zh_CN.GB18030 的locale,挂载这个分区选择iocharset=utf8在nautilus中创建目录和文件才正确(能正常创建并在两个系统中显示中文名;但这时在gnome终端用命令行中不能创建中文名目录和文件),改成iocharset=gb2312 在gnome nautilus中创建目录和文件反而不行(在nautilus中不能创建目录,可以创建文件但中文名在windows下为乱码;但这时在gnome终端的命令行下可以正常创建中文名目录和文件,并且在windows系统下也能正确显示中文名)。而在原来使用的 Redhat linux 9.0 中,因为它使用的是GB18030的locale,这时,iocharset=gb2312才行,见:解决redhat linux9.0下挂载windows分区中的中文文件(夹)名乱码
。另外,两种locale下不设置iocharset参数也不能正常显示中文目录(文件)名。gid和uid是我登录用的帐号的组id和用户id,这样,fat32下面的东西的组和用户都成了我的登录帐号的了。如果,你又指定了 dmask 和 fmask ,那么,前面的umask针对目录和常规文件的屏蔽码就不起作用了。另,据说,dmask和fmask是后来才有的,早期的mount 命令是没有的。

二、挂载的fat32分区和ext2分区在创建文本文件时的权限上是不同的

比如,上面的umask 为022,在控制台下在fat32分区上创建的新目录和新文本文件和原来的旧目录和旧文本文件的权限都是755;而如果系统的umask值是022(/etc/profile中设定的)ext2分区以默认的参数挂载,在/etc/fstab中是:

/dev/hda10 /home ext2 defaults 0 2

,这时,在控制台下创建的目录的权限是755,而新创建的文本文件的权限却是644了,默认没有可执行权限。

三、在控制台下用命令和在如gedit等程序中创建的目录和文件的权限使用了系统umask值,而在图形界面的nautilus中用菜单或鼠标右键创建的目录和文件的权限则基本上不会理会系统umask的值(除了我测试过的在挂载fat32分区时创建目录)。

如,我用umask 020 改变了系统umask 的值,在控制台下在前面的ext2分区中创建的目录和文件是根据新的umask值来确定权限的,而在图形界面的nautilus中用菜单创建的目录或文件的权限却与没有改umask值前一样,即保持目录为:755,文本文件的权限为600。

而且,在用前面命令挂载的fat32分区上,在nautilus中用菜单创建的目录跟命令中使用的umask参数(如:设置 -o umask=021,或 umask=066)一致,而用菜单创建的文件的权限却一直都是600。

我在网上查了一下资料,gnome 的 nautilus 程序忽略系统umask的值好像是它的一个bug,见:idea #200: Umask and Permissions in Nautilusnautilus umask bug permissions problem on networkBug 327249 nautilus ignores umask。不过,这个问题的中文资料竟然没有搜索到。还有,也不知道这个问题现在解决没有?

上面的内容基本上就是一个linux下mount命令相关的,还有就是跟natilus有关,linux下的mount命令非常的强大,也非常的复杂,因为,linux几乎可以识别和挂载世界上所有的文件格式,每一种文件格式就有相关的挂载参数。所以,我觉得,作为一般的 linux用户,掌握一些最基本的参数就行了,到时要用到时,再去man mount,或者上网 google。

附一篇讲解 fstab 文件非常详细的文章:学会理解并编辑fstab

在 Ubuntu Server 7.10 上安装 wordpress, shopex 和 discuz 的一些要点及问题记录

安装好Ubuntu 7.10 Server后,我在上面安装了 wordpress 2.2.1 带中文包,shopex V4.7.2 和 discuz 5.5 ,这里记录一些碰到的技术要点和疑问备忘。

1、修改 mysql 5.0.45的默认字符集,我准备统一使用 utf8 编码,所以改了服务器端和客户连接的默认字符集为 utf8。方法为:

在[client]下添加:
default-character-set=utf8

在[mysqld]下添加:
default-character-set=utf8

在控制台下用 mysql -hlocalhost -uroot -p 进入数据库后,status显示:

Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
当数据库的字符集是utf8是, 在[client]下添加:default-character-set=utf8,并且本地控制台的locale为utf8的,才能在控制台中正常显示中文。

但在wordpress中,使用默认的latin1字符集,它创建的数据表是用utf8编码,但是数据库的编码是latin1,好像也不影响使用?不知道Server characterset和Db characterset 对mysql数据库的实际应用上有没有什么影响?即只是数据库表用utf8编码,status显示上面的4个characterset是默认的latin1对数据库表使用的utf8编码有没有什么影响?

2、服务器时间设置

ubuntu server 默认使用 UTC 时间,比CST (中国标准时间)慢(重庆时区是慢8小时),如果安装的时候没有使用CST时间,可以这样改变:

sudo tzselect

然后按照提示选择地区(如亚洲),国家(如中国)国内地区(如四川), 然后在你的家目录下的.profile中添加一行TZ变量,如:

TZ='Asia/Chongqing'; export TZ

使改变永久生效。

在 wordpress 中需要在“设置”的“日期和时间”中选择时区,我这里选择“本 blog 的时区:

小时 (您所在的时区,比如北京时间就填 8。)”3、启用 mod_rewrite 模块,使 wordpress和 shopex可以使用URL伪静态化。sudo a2enmod rewrite

这里要注意在控制台w3m下面开启wordpress的 伪静态化不能生效,必须在图形界面的全功能浏览器下面进行!我在这上面折腾了好久,最后安装了一个X,在X下用firefox设置才发现问题;

然后,sudo vim /etc/apache2/sites-enabled/000-default下面<Directory />和<Directory /var/www/>中的“AllowOverride None”改为“AllowOverride All",其它的部分没有改(如<Directory "/usr/lib/cgi-bin">),在我的应用中使用正常。

<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
#RedirectMatch ^/$ /apache2-default/
</Directory>

然后:sudo /etc/init.d/apache2 restart 重启 apache2生效。

4、启动压缩传输功能:

sudo a2enmod deflate

重启 apache2生效。

5、启用目录默认文件功能:

如:输入 http://www.mydomain.com/ 实际上使用的是 http://www.mydomain.com/index.php 文件。

a2enmod dir
vim /etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c>

DirectoryIndex index.php index.htm index.html index.cgi index.pl index.xhtml

</IfModule>
或者:

vim /etc/apache2/httpd.conf ,输入:

<IfModule mod_dir.c>

DirectoryIndex index.php index.htm index.html index.cgi index.pl index.xhtml

</IfModule>

也行。

6、使用 shopex 需要使用 Zend Optimizer 才能用
参见:在ubuntu环境中安装zend optimizer3.3.0

7、使用 shopex的上传图片自动生成略缩图功能和添加水印需要增加gd库

sudo apt-get install php5-gd

重启apache2 生效。

查看gd库生效没有可以调用一个写有一句phpinfo()的页面查看相关信息。

如名称为:phpinfo.php ,内容如下:

<?php phpinfo(); ?>

gd 库生效了会在其中显示相关信息,如:

gd

GD Support enabled
GD Version 2.0 or higher
FreeType Support enabled
... ...

等内容。

8、另外,还要注意一些目录的权限问题,在上面程序的安装说明中有。

还有,把wordpress的uploads 的所有者和组改为apache2的 www-data 就可以上传文件了,要不然把这个目录的权限改为777也行,个人感觉前者好像更好点?

9、另外,wordpress 和 discuz的邮件发送碰到一点问题: ubuntu server 下discuz 和 wordpress 程序不能用sendmail 正常发送非本地用户邮件的疑问 。解决了再补充一下。

Ubuntu 7.10 Server 安装日记

Ubuntu 是我喜爱的 Linux 发行版之一,用它的桌面版很久了,但是用服务器版还是首次。下面把我在一台 Intel 815 主板 + 賽扬1G 的老机上安装 Ubuntu 7.10 Server 的一些要点记录一下。

1、下载:

到 Ubuntu  官网下载最新的PC (Intel x86) server install CD ,然后刻录到光盘;

2、安装

这一步与一般 Linux 的安装大同小异,我选的是手动分区和英语安装介面(网上好多文章都是说用英文的界面,不知用中文的有什么问题?),一直以来我都用的手动分区,自动分区总觉得给人一种心里不踏实的感觉 :-),不过好像自动分区也有确认和修改的选项,我竞然这么长时间了也没有去尝试一下。

选择服务器的时候我选了 Lamp 和 OpenSSH 等。Lamp 就是著名的 Linux + Apache + Mysql + Php 组合。安上就可以用,很方便。 OpenSSH 提供安全的 telnet、ftp 服务,也安上了。

3、设置

在我装WordPress的时候,我发觉没有中文的控制台环境支持安装中文版的Wordpress 有点困难。所以觉得添加一个 zhcon 的中文控制台环境还是必要的。我按照网上的方法用sudo apt-get install zhcon 时,下载了二十多兆的文件,完成安装后控制台却成了黑屏,按键盘也没有响应。最后只得按复位键重启机器。卸载了zhcon,下载源码安装了zhcon。

首先安装开发工具:

sudo apt-get install build-essential

再安装:

sudo apt-get install libncurses5-dev (网上看的,不安可能 zhcon 使用不正常,不过没确认)

再安装控制台下的鼠标服务:

sudo apt-get install gpm (原来有一次移植 zhcon 的时候好像 zhcon 对 gpm 有依赖,就先装它了,不过同样没确认不装它 zhcon 能不能用)

然后按照自编译安装zhcon0.2.6的方法(转)的方法安装了 zhcon。

执行zhcon 就一切正常了。这样,我就可以用w3m 看中文网页了(要按o 在选项设定语言选项),也顺利的把中文版 wordpress 安装起了。

另外一些探索过的知识点:

安装Ubuntu的桌面环境:sudo apt-get install ubuntu-desktop (好像要下载400多兆的文件才装得上,而且我不会在这个服务器环境中做开发,仅是调试而已,所以就没装。而且,按常规,服务器是不宜装桌面的?)

加 locale: locale-gen zh_CN.UTF-8

dpkg-reconfigure locales 也是配置 locale 的,具体怎么用,还不清楚。

在文件 /etc/default/locale中改变默认的locale 。

不过我发现不装中文locale对wordpress的使用也没有影响,如果假设以后碰到必须改变locale的情况的话可以试试 。

有问题的地方还望朋友多多指点,谢谢。

Ubuntu Forums和ubuntu下不能用ntp服务网络校时的讨论(links for 2007-09-30)

  • Ubuntu Forums

    Ubuntu is a complete Linux-based operating system, freely available with both community and professional support. By JOINING US today you can participate in our active and growing community.

    (tags: linux ubuntu forums 网站收藏)

  • Can't synchronize time with Internet servers - Ubuntu Forums

    I've read a few threads here about trying to get the system clock to sync with Internet servers, and they all seem to go into "nightmare territory" (by my definition). I don't know why this is... if it's not ready, maybe it shouldn't be an option ...

    (tags: linux ubuntu ntp)

Ubuntu下ADSL拨号成功后启动ntpdate网络校时和77个网络相关linux应用小技巧(links for 2007-09-29)

Ubuntu的网络校时怎么不起作用?

我在ubuntu下使用的是ADSL拨号上网,系统启动自动拨号连接。

昨天,我在ubuntu6.0.6下修改系统时间的时候发现可以使用网络校时(即ntp)。点击设置界面上的“立即同步”,系统时间就自动修正了。这个选项上面有一项“定期与internet服务器同步时钟”的选项,我勾选了,默认的服务器有”ntp.ubuntu.comt和127.127.1.0“,我又添加设置了另外两个ntp服务器为“cn.pool.ntp.org和hk.pool.ntp.org”,时区选的是“Asia/Chongqing”。在勾选的时候,系统要求安一个ntp的包,也按照提示安上了。确认后退出。

但是,我发现这个“定期与internet服务器同步时钟”没有起作用!我把时间故意修改成多一个小时,然后重新启动系统。时间还是我修改过的,没有被更正过来!那这个有什么作用呢?!我搜索有关ntp的网页(Linux架设网络校时服务器、Linux和windows操作系统网络校时(links for 2007-09-28)),查看了一下相关的文件。在ntp服务的日志里(/var/log/ntpstats),查看当天的记录,确实每隔一分钟就记录了一次,部分日志记录如下:

54372 35619.638 202.130.120.114 9014 -3596.757066134 0.112971837 0.001455873 3597.447984995
54372 35621.527 127.127.1.0 9014 0.000000000 0.000000000 0.000945000 0.000001907
54372 35622.606 218.75.4.130 9414 0.619085926 0.076016308 0.002438134 1359.704375162
54372 35625.011 91.189.94.145 9614 0.661968500 0.462467000 0.004347983 1359.715265621
54372 35683.702 202.130.120.114 9014 -3596.757066134 0.112971837 0.002246536 3330.589801081
54372 35685.672 218.75.4.130 9414 0.619085926 0.076016308 0.003047042 1922.914781665
54372 35687.585 127.127.1.0 9614 0.000000000 0.000000000 0.000990000 0.000001907
54372 35690.059 91.189.94.145 9014 0.661968500 0.462467000 0.005074957 1922.927712896

其中202.130.120.114(hk.pool.ntp.org)中反映出了一个小时的差异,127.127.1.0是本地的错误的时间中反映的是没有差异,而另外两个服务器却是不到1秒的差异(我猜测数据的第5列是时间差),明显是错的。不知是否这两台服务器当时不能连接?

从日志中看到,ntp系统发现了错误,却没有自动把系统的时间给纠正过来,不知是怎么一回事?是不是我在什么地方没做对?

根据我在前面搜索的资料和这篇文章Bug #48506 in ntp (Ubuntu): “Run ntpdate after ppp interface comes up”,我把原本是在/etc/network/if-up.d下的ntpdate和ntp-server两个文件拷贝到/etc/ppp/ip-up.d目录下,当系统启动后,错误的时间就自动纠正了。我估计前一个目录下的内容是网卡启动执行,后一个目录下的内容才是ADSL连接成功后执行。

根据我的理解,这个纠正是ntpdate 命令的功劳,并不是启动了ntp server的ntpd的功劳。而据文章Time Synchronisation with NTP的内容,ntp server的ntpd可以有规律的根据远程ntp服务器校正本地时间。而我的实验这个ntpd却是不起作用的。前面只拷贝那个ntpdate文件应该就行了。或者,自己写一个包含类似“ntpdate hk.pool.ntp.org”内容的文件放在里面也应该行。

这是怎么一回事?

Linux架设网络校时服务器、Linux和windows操作系统网络校时(links for 2007-09-28)

Ubuntu下用mplayer+firefox+mplayerplug-in+MediaPlayerConnectivity看在线电影碰到的两个问题(links for 2007-09-25)