Thursday May 28, 2009

经历了不下十次以上的 configure make和make install,

终于搞定了。 归咎起来还是Opensolaris上软件的缺乏和不完整性。

之前一直用gcc编译,但一直会出现ld连接错误。

安装步骤:


  1. Install Sun compilers by issuing the following command: pfexec pkg install ss-dev.  The tools are installed in /opt/SunStudioExpress.
  2. Prepare the user environment for MySQL by issuing the following commands:
    • groupadd mysql
    • useradd -g mysql mysql
  3. Become the mysql user with su mysql.
  4. Download the latest MySQL source from dev.mysql.com. I downloaded the compressed GNU TAR archive (tar.gz) version 5.1.29-rc from here.
  5. Extract the MySQL source code from the archive with the commands below.  The source code will be extracted to mysql-5.1.29-rc.
    • gunzip mysql-5.1.29-rc.tar.gz
    • tar xvf mysql-5.1.29-rc.tar
  6. Set the following environment variables:
    • export CC=/opt/SunStudioExpress/bin/cc
    • export CXX=/opt/SunStudioExpress/bin/CC
    • export CFLAGS="-xO3" #Change this to have your compiler variables
    • export CXXFLAGS="-xO3"
    • export PATH=$CC:$CXX:/usr/sfw/bin:/usr/ccs/bin:$PATH
  7. Create a sym link from gmake to make with cd /usr/sfw/bin ; ln -s gmake make
  8. cd to the source code directiory. In my case mysql-5.1.29-rc.
  9. Execute the following command at the prompt: ./configure --prefix=/usr/local/mysql
    • The configure command allows you to control the configuration of the MySQL source distribution.  A full listing of the options to configure can be found here.  Prefix simply installs architecture-independent files in the location specified by prefix (everything is installed under /usr/local/mysql rather than the default of /usr/local).
  10. Execute the following command at the prompt: make
  11. Execute the following command at the prompt: make install
 At this point, under /usr/local/mysql/bin, you will see the mysql_install_db script, which will allow you to install MySQL.  After that, you can run mysqld_safe to start mysql.

Friday Feb 20, 2009

People can access file at

http://blogs.sun.com/hiro/resource/publication/Kernel_comparison.pdf

 

You are very welcomed to comment.

Tuesday Feb 10, 2009

不明白为什么两个系统如此的相似。似乎linux这个小弟,从soalris大哥这边学到了很多在SMP上运行的算法。

 

摘要:同步概念在多线程和多进程编程中已经被诠释得很全面。同步方法对于用户应用程序来讲使用简单,无需过多考虑它们产生的原因(唯一的原因就是线程或进程并发)。但是内核中的同步处理就要复杂得多,开发者必须知道内核中任务得调度方式,才能有效的控制内核中的同步。所以本文就将结合内核任务调度,分析内核中的同步措施,并结合一个实例讲述内核中如何综合运用各种同步方法。

并发,竞争与同步:

并发,竞争和同步的概念,我们假定大家都有所了解,本文不再重申。我们讨论的重点放在什么情况会发生内核并发上?如何防止内核并发?有那些同步方法?以及这些方法的行为有何特点和如何使用它们?

下面一段描述了上述几个概念之间的大致关系,这种关系在内核中同样适用。

对于多线程程序的开发者来说,往往会利用多线程访问共享数据,避免繁琐的进程间通讯。但是多线程对共享数据的并发访问有可能产生竞争,使得数据处于不一致状态,所以需要一些同步方法来保护共享数据。多线程的并发执行是由于线程被抢占式的调度——一个线程在对共享数据访问期间(还未完成)被调度程序中断,将另一个线程投入运行——如果新被调度的线程也要对这个共享数据进行访问,就将产生竞争。为了避免竞争产生,需要使线程串行地访问共享数据 ,也就是说访问需要同步——在一方对数据访问结束后,另一方才能对同一数据进行访问。

内核并发原因

上述情况是用户空间并发产生的普遍原因,对于内核来说并发原因也大致类似,但是情况要更多样,也更复杂。

对于单处理机器来说情况相对简单一些。在2.6版本内核之前,Linux内核是非抢占式的——在内核任务没有执行完之前不能被打断,这样的话,内核中程序并发执行的情况很少,准确地讲只有两种可能:

一 :中断发生 ,因为中断执行是异步的,而且中断是在非抢占式内核中打断当前运行内核代码的唯一方法,所以中断显然是可以和其它内核代码并发执行的。因此如果中断操作和被中断的那内核代码都访问同样的内核数据,那么就会发生竞争。

二 :睡眠和再调度, 处于进程上下文(下面会进行讲述)的内核任务可以睡眠(睡眠意味放弃处理器),这时调度程序会调度其它程序去执行(首先执行调度任务队列中的内核任务,然后执行软中断等,最后从运行队列中选择一个高优先级的用户进程运行)。显然这里也会造成内核并发访问,当睡眠的内核任务和新投入运行的内核任务访问同一共享数据时,就发生了竞争。请看参考资料 1

2.6版本的内核变成了抢占式内核——内核可能在任何时刻抢占正在运行的内核代码。所以内核中发生并发执行的情况大大增加了。内核抢占成为了内核程序并发的又一种可能,所以在开发抢占式内核代码时需要时刻警惕抢占产生的竞争。

单处理器上的并发是逻辑上的伪并发,事实上所谓并发的内核程序其实是交错地占用处理器。真正的并发执行程序,必须依靠对称多处理器。但无论是逻辑上的并发还是真正的并发,都会产生竞争,而且它们的处理也是相同的。但是对于对称多处理器来说,由于两个或多个处理器可以在同一时刻执行代码,所以会不可避免地给内核带来并发可能,如果分别在不同处理器上执行的内核代码同时访问同一共享数据,竞争就产生了。因此,不用说对称多处理是内核并发的又一种可能。 请看参考资料2

可以看到随着Linux内核不断演化,在内核对系统支持更加全面,对任务调度更加高效的同时,也给内核带来了更多的并发可能,更容易引起竞争。上面提到的各种并发情况在内核中都必须得到有效的处理,才能确保内核有高稳定性。

无论是中断产生的并发或是睡眠引起的并发,还是内核抢占引起的并发,要想在内核开发中很好地避免,就必须从本质上了解它们的并发原因。只有在掌握内核任务的调度机制后,才可以真正的达到对并发可能的预测,进而能够采取合适的同步方法——锁——来避免并发。

下面我们就对任务调度进行讨论。对比并发产生的条件,分析内核中的调度发生的条件。

内核中的任务调度:

我们这里所说的任务调度不同于常说的进程调度。进程调度是:内核中的调度程序在进程运行队列中选择合适的(优先级高的)进程执行。而我们所说的内核任务调度指的是,内核中的任务获得执行机会。对于内核并发来说,内核任务之间的关系尤为重要。

首先我们来看看内核有那些任务,各有什么特点。

内核任务种类

硬中断操作:

硬中断是指那些由处理器以外的外设产生的中断,这些中断被处理器接收后交给内核中的中断处理程序处理。要注意的是:第一,硬中断是异步产生的,中断发生后立刻得到处理,也就是说中断操作可以抢占内核中正在运行的代码。这点非常重要。第二,中断操作是发生在中断上下文中的(所谓中断上下文指的是和任何进程无关的上下文环境)。中断上下文中,不可以使用进程相关的资源,也不能够进行调度。请看参考资料2

 

软中断操作:

软中断是Linux中为了执行一些硬中断操作来不及完成的任务而采取的推后执行机制。因为硬中断操作期间的中断会被抛弃,所以硬中断是在不安全时间运行的。不安全时间应该尽量短,所以采用软中断来执行大部分任务,它会把硬中断做不完的耗时任务推后到安全时间执行(软中断期间不会丢弃中断信号)。

软中断不象硬中断那样时随时都能够被执行,笼统来讲软中断会在内核处理任务处理完毕后返回用户级程序前得到处理机会。具体的讲有三个时刻它将被执行(do_softirq()):硬件中断操作完成后;内核调度程序中;系统调用返回时,(另外的内核线程ksoftirqd周期执行软中断)。需要说明的是软中断的执行也处于中断上下文中,所以中断上下文对它的限制是和硬中断一样的。

Tasklet 和bottom half

 Tasklet和bottom half都是建立在软中断之上的两种延迟机制,其中具体不同在于软中断是静态分配的,而且同类软中断可以并发地在几个CPU上运行;Tasklet可以动态分配,并且不同种类的Tasklets可以并发地在几个CPU上运行,但同类的tasklets 不可以;bottom half只能静态分配,实质上下半部分是一个不能与其它下半部分并发执行的高优先级tasklet,即使它们类型不同,而且在不同CPU上运行。

系统调用

   系统调用是用户程序通过门机制来进入内核执行的内核例程,它运行在内核态,处于进程上下文中(进程上下文包括进程的堆栈等等环境),所以系统的调用代码可以对进程相关数据进行访问,可以执行调度程序,也可以睡眠。

内核任务之间并发关系

上述内核任务很多情况是可以交错执行的,所以很有可能产生竞争(都要访问同一个数据结构时,就产生了竞争)。下面分析这些内核任务之间有那些可能的并发行为。

可以抽象出,程序(用户态和内核态一样)并发执行的总原因无非是正在运行中得程序被其它程序抢占,所以我们必须看看内核任务之间的抢占关系:

中断处理程序可以抢占内核中的所有程序(当没有锁保护时),包括软中断,tasklet,bottom half和系统的调用,甚至也包括中断处理程序。也就是说中断处理程序可以和这些所有的内核任务并发执行,如果被抢占的程序和中断处理程序都要访问同一个资源,就产生了竞争。

软件中断可以抢占硬中断处理程序以外的内核程序,所以内核代码(比如,系统调用)中有数据和软中断共享,就有会有竞争。此外要注意的是,软中断即使是同种类型的也可以并发的运行在不同处理器上,所以它们之间共享数据都会产生竞争。(如果在用一个处理器上软中断是不能相互抢占的)。

同类的tasklet不可能同时运行,所以对于同类tasklet不会产生并发;但两个不同种类的tasklet有可已在不同处理器上并发运行,如果之间有数据共享就会产生竞争(同类的tasklet在同一个处理器上运行的tasklet不发生相互抢占的情况)。

Bottom half 无论是否是同类的,即使在不同处理器上也都不能并发执行,它是绝对串行化的,所以它们之间永远不能产生竞争。

注意:tasklet和bottom half是建立在软中断之上的,所以它们也都遵从软中断的调度规则——都可以打断进程上下问中的内核代码(系统调用),都可被硬中断打断——这些都可能产生并发。

系统调用这种内核代码可能和各种内核代码并发,除了上面提到的中断(软,硬)抢占它产生并发外,它是有可能自发性地主动睡眠(比如在一些阻塞性的操作中),放弃处理器,重新调度其它任务,所以系统调用中并发情况更普遍,尤其当用户空间需要和内核空间共同操作全局数据时,一定要注意保护。

 

内核同步方法

为了避免并发,防止竞争。内核提供了一组同步方法来提供对共享数据的保护。 我们的重点不是介绍这些方法的详细用法,而是强调为什么使用这些方法和它们之间的差别。

Linux使用的同步机制可以说从2.0到2.6以来不断发展完善。从最初的原子操作,到后来的信号量,从大内核锁到今天的自旋锁。这些同步机制的发展伴随Linux从单处理器到对称多处理器的过度;伴随着从非抢占内核到抢占内核的过度。锁机制越来越有效,也越来越复杂。

目前来说内核中原子操作多用来做计数使用,其它情况最常用的是两重锁以及它们的变种,一个是自旋锁,另一个是信号量。我们下来就着重介绍一下这两中锁机制。

自旋锁

自旋锁最多只能被一个可执行线程持有,如果一个执行线程试图请求一个已被争用(已经被持有)的自旋锁,那么这个线程就会一直进行忙循环——旋转——等待锁重新可用。要是锁未被争用,请求它的执行线程便能立刻得到它并且继续进行。自旋锁可以在任何时刻防止多于一个的执行线程同时进入临界区。

事实上,自旋锁的初衷就是:在短期间内进行轻量级的锁定。一个被争用的自旋锁使得请求它的线程在等待锁重新可用期间进行自旋(特别浪费处理器时间),所以自旋锁不应该被持有时间过长。如果需要长时间锁定,最好使用信号量。

自旋锁的基本形式如下:

spin_lock(&mr_lock);

spin_unlock(&mr_lock);

因为自旋锁在同一时刻只能被最多一个执行线程持有,所以一个时刻只有一个线程允许存在于临界区中。这点很好的满足了对称多处理机器需要的锁定服务。在单处理器上,自旋锁仅仅当作一个设置内核抢占的开关。如果内核抢占也不存在,那么自旋锁会在编译时被完全剔除出内核。

自旋锁在内核中有许多变种,如对bottom half 而言,可以使用spin_lock_bh()用来获得特定锁并且关闭半底执行。相反的操作由spin_unlock_bh()来执行;如果临界区的访问逻辑可以被清晰的分为读和写这种模式,那么可以使用读者/写者自旋锁,调用形式为:

读者的代码路径:

read_lock(&mr_rwlock);

read_unlock(&mr_rwlock);

写者的代码路径:

write_lock(&mr_rwlock);

write_unlock(&mr_rwlock);

      简单的说,自旋锁在内核中主要用来防止多处理器中并发访问临界区,防止内核抢占造成的竞争。另外自旋锁不允许任务睡眠(持有自旋锁的任务睡眠会造成自死锁),它能够在中断上下文中使用。

信号量

Linux中的信号量是一种睡眠锁。如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠。这时处理器获得自由去执行其它代码。当持有信号量的进程将信号量释放后,在等待队列中的一个任务将被唤醒,从而便可以获得这个信号量。

信号量的睡眠特性,使得信号量适用于锁会被长时间持有的情况;只能在进程上下文中使用,因为中断上下文中是不能被调度的;另外当代码持有信号量时,不可以再持有自旋锁。

信号量基本使用形式为:

static DECLARE_MUTEX(mr_sem);//声明互斥信号量

if(down_interruptible(&mr_sem))

up(&mr_sem);

同自旋锁一样,信号量在内核中也有许多变种,比如读者-写者信号量等,这里不再做介绍了。

 

 

信号量和自旋锁区别

虽然听起来两者之间使用条件复杂,其实在实际使用中信号量和自旋锁并不易混淆。注意以下原则。

如果代码需要睡眠——这往往是发生在和用户空间同步时——使用信号量是唯一的选择。由于不受睡眠的限制,使用信号量通常来说更加简单一些。如果需要在自旋锁和信号量中作选择,应该取决于锁被持有的时间长短。理想情况是所有的锁都应该尽可能短的被持有,但是如果锁的持有时间较长的话,使用信号量是更好的选择。另外,信号量不同于自旋锁,它不会关闭内核抢占,所以持有自旋锁的代码可以被抢占。这意味者信号量不会对影响调度反应时间带来负面影响。 

Monday Jan 05, 2009

岁末年初之际,InfoWorld总结出了与开源相关的2009年五大趋势(http://weblog.infoworld.com/openresource/archives/2008/12/open_source_tre.html?source=rss),其中包括开源商业化力度加大、将发生更多与开源相关的收购交易等,以下为全文:

  1、开源更加商业化

  正如开源服务提供商MuleSource首席执行官戴夫·罗森伯格(Dave Rosenberg)所指出的一样,开源商业化力度将进一步加强,需改变传统的放弃软件销售技术服务支持的观点。企业CIO和CTO们现在更加实际,他们 不会按照开源厂商的意愿来购买技术支持;他们只会购买那些可以使其业务增值的东西。我个人的观点是,一个技术要想获得持续化发展,它需要更加商业化。

  2、试验更多商业模式

  尽管开源Linux厂商红帽公司凭借其企业服务收费模式大获成功,但是现在开源行业已经与当初发生了很大的变化。诸如Alfresco、 Pentaho、SugarCRM和MySQL都有自己的独到之处。在MySQL,其核心服务器是完全开源的,但是某些增加功能是通过收费模式提供的。像 Pentaho和SugarCRM等其它公司,在它们的企业产品中也都有闭源功能。我认为,明年将会有越来越多的商业模式试验,企业将明确的分出哪些措施 用来鼓励用户变为付费客户。

  3、更多收购交易

  早在2008年年初,Sun以10亿美元天价收购了MySQL,分析师曾预测它将掀起一轮收购狂潮。但是事实上,除了一些中等规模的交易之外,开源相 关的收购多多少少处于停滞状态,原因是股票市场的低迷影响并购市场的活跃。我认为,随着市场的稳定,明年我们将看到并购市场的再次复苏。对于那些手中握有 现金的公司来说,现在无疑是捡便宜的大好时机。

  4、用户社区力量更加强大

  尽管开源商业化力度加大(我不认为这是一件坏事),我估计开源社区中用户的力量也会取得同样的增长。企业IT部门的普通用户将更多的加入到开源社区中 来。随着开源逐渐应用到企业中,IT用户将更多的参与到开源项目中,以在项目中提出对自己非常重要的建议。多数开源公司都有自己的企业顾问委员会,通过它 众多客户可以帮助制定产品路线图。我认为这个趋势将会继续。

  5、开源更加主流化

  最有可能的趋势是,开源将继续渗透到IT核心架构中,尤其是在操作系统、中间件和数据库方面。市场分析机构Gartner曾发布报告称,开源数据库的 应用在去年已经超过了50%。我认为专有软件不会是一个新创公司的首选。越来越多的公司正在使用开源软件来控制它们的开支。既然开源软件都已经被谷歌、阿 尔卡特、诺基亚和美联社等大企业所认可,有什么理由不使用它呢?尤其是在当今经济大环境恶劣的情况下,选用开源软件无疑是一种更经济的选择。

Thursday Dec 18, 2008

网络上一篇关于linux等新技术的学习,挺有意思的总结。我好像不幸被说中几点

 

1. 不要当“传教士”

很多人在讨论区不断的引起 “Linux vs. Windows” 之类的讨论,甚至争的面红耳赤,这是没有必要的。

这种争论是浪费时间而没有任何用处的。对,你花了一下午,用许多事实“捍卫”了 “Linux 比 Windows 好” 这个说法。但是 Windows 的支持者并不会喜欢上 Linux,他们只是稍微退缩一下,然后找一些新的证据来跟你辩论。

世界上的人们都在利用 Linux 研究最前沿的科学,我们还在这里讨论 “要不要用 Linux” 这种无聊的问题,什么时候才能赶上时代前进的步伐?

什么叫做“Windows 支持者”,什么叫做“Linux 支持者”?我们为什么要支持某一个而反对另外一个?你不需要为 Linux “护法”,不需要成为“Linux 支持者”或者“GNU传教士”,GNU/Linux 已经用事实向世界证明了它们的威力,已经被大多数人接受。你只需要安安静静享受 GNU/Linux 给你的乐趣和自由。

你需要关心的不是你的工具是什么,而是你用它做了什么。精通 Linux 并不说明任何问题,因为它只是一个工具而已。如果你用 Windows 能很好的完成你的任务,那你就没有必要费时间去熟悉 Linux。直到有一天你发现一项任务只有 Linux 才能完成的时候再换也不迟,因为你身边的 Linux 的爱好者一定会很乐意的帮助你。

工具不是人,不应该对工具有感情。这是你在进行任何对工具的讨论前需要提醒自己的事情。面对一些容易引起争论的东西:Word 和 TeX;Emacs 和 VIM;MAXIMA,Mathematica 和 Maple;Gnome, FVWM 和 KDE;Mutt 和 Pine …… 一定要冷静的对自己说:“我不站在它们任何一边,因为它们不是人。”

各人的需要不同,生活的环境不同。对你来说好的东西,对别人来说不一定好,我们需要尊重别人的选择。如果你当面说别人正在用的程序不好,没有人会乐意接受你的意见。我从来没有建议过我爸爸不用 Windows + WPS,而用 Linux + LaTeX 来处理他的英语试卷。因为 WPS 是我爸爸的选择,他能用 WPS 编辑出很好的试题去测试他的学生,那就足够了。

我曾经帮我爸爸做了一个 perl 程序,能够自动从一种我自己设计的 markup 语言转化成 LaTeX 格式的英语试卷。可以自动对试题编号,乱序排版选择题的选项,自动生成答案表,生成老师用的显示答案的版本,自动对短文改错题进行优化分段,自动拼写检查,图形化的配置方式…… 我爸爸高兴的用了一段时间,可是后来他想用 WPS 里的一种标题样式,而我不在家,无法为他修改程序。所以他又换回了 WPS。这就像有人送爱因斯坦一罐剃须泡沫一样,刚开始几天,发现他神采飞扬,不断夸这个东西真舒服。过了几天,发现爱因斯坦又开始用白水剃胡子了,因为剃须泡沫用完了,他懒得自己去买那个东西。这只是习惯问题。

2. 不要强迫自己

喜欢电脑的人总是有某些心理强迫倾向。有的人说:“键盘比鼠标快。我不要用鼠标。这样才有高效率。” 所以他在编辑器里无论什么时候总是用 20w, 10j 这样的命令到达目的点。他甚至觉得图形界面是多余的,干脆 Xwindow 都不装。

全部用键盘看起来的确比让手离开键盘去拿鼠标,再回来“快” 多了,但是快的击键频率不等于工作的高效率,对你的健康更没有什么好处。这只能把你变成打键盘的机器。

当你正在检查你的文章或者程序,思维正在随着字符的含义流动,突然 20w, 10j 这样的东西出现在你的脑子里,是不是会打断思路?不?那说明你当时思考的问题比较简单,这些干扰还不会起到副作用。

其实很多人用电脑的时候,思想都受到某种教条的束缚,上面这个只是众多教条中的一种。某些人制造了很多这种教条,用他的工作方式来要求别人,嘲笑方式跟他不一样的人。比如有的人嘲笑其它人写 C 程序不按 8 字符缩进,嘲笑别人在 vi 里用方向键,嘲笑别人不知道 PVM 是什么,嘲笑其它人用 JAVA, C# 这种由 GC 回收内存语言……

你不用管各种各样的教条,电脑只是你的奴隶,你想怎么用就怎么用。没有人能够约束你,没有人可以嘲笑你的工作方式。电脑明天就不再是这个样子,所以今天你不用完全了解它。你没有必要知道别人创造的一切,因为你需要留点时间自己创造些东西。Just have fun!

当你下次修改文章的时候,不妨试试悠闲的用鼠标在你眼睛看到的地方轻轻点一下。

3. 不要“玩 Linux”

很多人用 Linux 的时候会感觉很迷茫,该用哪个发行呢?是不是我少装了什么?怎么升级这么快啊!怎么这么不稳定!每当遇到新的软件他就想试用,每当新的版本出现,他就更新,然后用鼠标在新的菜单里选择从来没见过的程序来用用。

其实你是为了Linux而使用Linux,而没有找到正确的理由来利用 Linux。你首先要明确用电脑的目的,你用它是为了解决你的实际问题,而不是为了学习安装操作系统,不是为了测试哪个版本好用,不是为了“赶上潮流”,更不是因为你硬盘太大了,你想多占点空间。

如果你启动了电脑之后不知道应该干什么,那么最好先不要用电脑,因为你可能有更重要的事情需要做。

4. 不用挑剔发行版本

很多人刚开始用 Linux 的时候,总是在怀疑别的发行版本是否比自己正在用的这个好,总是怀疑自己以后时候会失去支持,不得不换用别的发行。所以很多人今天是 Redhat,明天又换成了 debian, 一会儿又是 gentoo, …… 甚至有的人在一台机器上装了两个版本的 Linux,然后比较哪一个好。

其实你完全没有必要这样做,任何发行,只要你熟悉了,你在上面的工作方式几乎是不会受到任何影响的。我以前一直用的 Redhat,当我有一天在我的一台新机器上安装 debian 时,我发现使用 Redhat 的经验完全没有浪费。我用了一个下午就配置好了 debian,使它服服贴贴的听我的话,就跟没有换发行一样。

Debian, TurboLinux, SuSE, Redhat, Gentoo, … 任何一个版本都是不错的。很多人认为自己攒一个 LFS 是高水平黑客的象征,但是不是每个人都有精力去了解所有细节。

如果你是用于个人的日常事物和科研,可以试试 debian。它是我见过的最方便的一个发行。

5. 不要盲目升级

不知道这是心理作用还是什么,有的人看到比较大的版本号,就会很想换成那个。很多人的 Redhat 本来配置的很舒服了,可是一旦 Redhat 发行新的版本,他们就会尽快下载过来,然后选择升级安装。结果很多时候把自己原来修改得很好的配置文件给冲掉了。新的软件又带来了新的问题,比如有一次我的 rxvt 升级到 2.7.8 就跟 miniChinput 冲突了,升级到 Redhat 8.0,发现 xmms 居然缺省不能放mp3了,XFree86 的 xtt 模块在 I810 上有新的 bug,会导致 Mozilla 突然退出。

如果你已经配置好了一切,千万别再整体升级了,这会浪费你很多很多时间的,不值得。有句话说得好:”If it’s not broken, don’t fix it.” 如果你的程序能够完成你需要做的事情,你何必升级呢?

6. 不要配置你不需要的东西

如果你只想做一个像我这样的普通用户,主要目的是用 Linux 来完成自己的科研任务和日常工作,那就可以不用系统管理员或者网络管理员的标准来要求自己,因为当一个系统和网络管理员确实很辛苦。普通用户学习那些不经常用到的复杂的维护系统的工具,其实是浪费时间,学了不用是会很快忘记的!

我不是一个合格的网络管理员,我的服务器都只设置了我自己需要的功能,设置好 ssh, ftp 已经足够了,那样可以省去我很多麻烦。我从来不过度考虑“安全”,因为 Linux 缺省已经很安全了。我没有磁带机,就不用管 tar 的那些稀奇古怪的参数了,czf, xzf, ztf 已经可以满足我所有的需要。sed, awk, … 我也只会几种常用的命令行。

7. 不要习惯的使用 root 帐号。在需要的时候才 su!

这是很多刚接触 UNIX 类操作系统的人常见的现象,他们不喜欢在管理系统的时候才 su, 而是一直用 root 帐号干所有事情,配置系统,安装程序,浏览网页,玩游戏,编程 ……

结果有一天,他不小心在某个系统目录使用了 rm * … 后果不堪设想……

8. 不要用商业的眼光来看 Linux。

Linux 不是商业软件,所以不要用要求 Solaris, Windows 那样的眼光来看 Linux. 自由软件的作者们从来不拉拢用户,他们对用户不负有任何责任。实际上在自由软件的世界里,“开发者”和“用户” 并没有明确的界限,大家是朋友。

自由软件很可能只是满足作者和他的朋友的需要,甚至是为了好玩而创造的。自由软件不是完美的,自由软件承认自己有缺点,它不会自吹自擂,蒙蔽“用户”的耳目。这种对作者责任的解脱激发了作者的创造力,他们不用过分考虑“向上兼容”,他们往往比背上重重包袱的商业软件结构更合理,技术更先进。

所以当你用某个自由软件遇到困难的时候,不应该埋怨软件的作者,因为他们对你并没有义务。你不应该把自己当成一个挑剔的顾客,而要把自己作为这个软件的顾问和一个和蔼的建议者,这样你才能理解作者写这个程序时的快乐,在遇到问题时向作者反映,帮助他完善这个软件,成为一个快乐的参与者。就像你的哥哥送你一个他用旧了的自行车,你应该珍惜这份友情,而不要在车坏了,或者骑车摔了一交的时候大骂你的哥哥。如果你真的不能使用这种合作的心态,那么最好不要使用这个软件。

这是一种先进的文化,它包含了互相合作,科学创新的精神。理解这一点不是很容易,很多人往往是因为不能理解这种文化而离开自由软件。这对于作者来说并没有什么损失。

9. 干你的正事去

很多人跟我说,你的网页浪费我好多时间来配置这配置那,一会儿是 FVWM,一会儿是 Mutt ……

嗯……那些东西都是我有空的时候一点一点积累的,如果你想一次性搞定所有那些东西,恐怕得花你几个星期甚至几个月的时间!并不是一定要搞定所有这些东西你才能正常工作的。除非你真的非得利用某个程序,或者你闲着没事,否则你可以不管这些东西。

Monday Nov 24, 2008

在Sparc的机器上编译MySQL 6.0是出现不能configure。

看脚本,出错原因是无法找到ar程序,后发现ar在/usr/ccs/bin/ar这个位置。

Wednesday Nov 19, 2008

在Solaris上安装Oracle10的方法:

1. 安装操作系统

从SUN公司的网站上下载了Solaris 11。它捆绑了许多实用的软件,如Sun Studio 10, OpenOffice, MySql, Gedit, Realplay, Mplay等等,且在Oracle安装文档中提及的软件包和补丁都不用另行再安装了。
 

2. 下载Oralce 10g R2 for Solaris x86
   
10202_database_solx86.zip

 

3. 解压软件
  

#unzip 10202_database_solx86.zip


注意:一定要在Solaris环境的终端环境中用unzip工具解压,否则都解压不完全。我在Windows下,和在Solaris文件管理器中解压都出错,而且还不报错,害我一直以为自己系统其它配置不对,为此郁闷近两个星期。

4. 增加oracle用户和组

 

#groupadd oinstall
#groupadd dba
#groupadd oper
#useradd -g oinstall -G dba
,oper -d /export/home/oracle oracle
#mkdir /export/home/oracle
#chown oracl:oinstall /export/home/oracle
#passwd oracle

5. 设置环境变量
   a.
修改 /etc/system,在其中添加

#/etc/system
set semsys:seminfo_semmni
=100
set semsys:seminfo_semmsl
=256
set shmsys:shminfo_shmmax
=4294967295
set shmsys:shminfo_shmmni
=100

注意:修改后重新启动系统,使之生效。

       b. 以root用户身份,添加group.dba项目

#projadd -U oracle -p 100 group.dba

       c. 修改/etc/user_attr,在其中添加

oracle::::project=group.dba


       d. 切换到oracle用户环境,用id -p命令检验b、c两步的正确性。

#su oracle
$id -p
uid
=100(oracle) gid=100(dba) projid=100(group.dba)


注意:如果id -p命令结果是oracle用户的默认project是新建的group.dba,则说明b、c两步操作正确。

       e. 查看项目group.dba的资源配置

#prctl -n project.max-shm-memory -i project group.dba
project: 
100: oracle
NAME                                   PRIVILEGE      VALUE      FLAG      ACTION      RECIPIENT
project.max-shm-memory    privileged       
2.00GB        -               deny


       f. 调整项目group.dba的资源分配

#prctl -n project.max-shm-memory -v 4gb -r -i project group.dba
#projmod -sK 
"project.max-shm-memory=(privileged,4294967295,deny)" group.dba


第一命令动态调整项目group.dba资源配置值,第二命令将调整值写入/etc/project文件中,使系统重启后调整值依然有效。

注意:
为了调整项目group.dba的资源配置,必须保证系统此时至少有一个会话是以oracle用户身份登录的。即为了调整oracle用户的项目group.dba的资源,必须至少另开一个终端,以su oracle切换到oracle用户身份。

查看调整后的结果:

#cat /etc/project
system:
0::::
user.root:
1::::
noproject:
2::::
default:
3::::
group.staff:
10::::
group.dba:
100::::project.max-shm-memory=(privileged,4294967295,deny)
#

6. 创建oracle数据库的安装目录

#mkdir -p /database/app/oracle/product/10.2.0/db_1
#mkdir -p /database/app/oracle/oradata
#mkdir -p /database/app/oracle/flash_recovery_area
#chown -R oracle:oinstall /database
#chmod -R 
755 /database

7. 创建oracle用户的启动文件/export/home/oracle/.profile,在其中设置oracle用户的环境参数。

#/export/home/oracle/.profile

#tmp directory settings
TMP
=/tmp
export TMP
TMPDIR
=$TMP
export TMPDIR

#oracle settings
ORACLE_BASE
=/database/app/oracle
export ORACLE_BASE
ORACLE_HOME
=$ORACLE_BASE/product/10.2.0/db_1
export ORACLE_HOME
ORACLE_SID
=jshu
export ORACLE_SID

#path settings
PATH
=$ORACLE_HOME/bin:$PATH
export PATH

#display settings
DISPLAY
=jinsonghu:0.0
export DISPLAY

#umask settings
umask 
022

8. 启动OUI,安装oracle数据库
  

   a. 首先,以root用户身份登录,给予终端运行X Window的权限

$su -
#xhost +jinsonghu

   b. 切换到oracle用户,保证启动文件得以运行,环境参数得以设置

#su oracle
$. /export/home/oracle/.profile


注意:第二行中,.和/中间要有一个空格。

      c. 进入前面用unzip解压后的目录,修改Oracle安装程序的两个配置文件:database/install/oraparam.ini和database/install/oraparamsilent.ini。将其中的5.10

[Certified Versions]
Solaris
=5.10
Linux
=redhat-3,SuSE-9,redhat-4,UnitedLinux-1.0,asianux-1,asianux-2

……

[Solaris-5.10-required]

……

[Solaris-5.10-optional]

……

改成5.11。

[Certified Versions]
Solaris
=5.11
Linux
=redhat-3,SuSE-9,redhat-4,UnitedLinux-1.0,asianux-1,asianux-2

……

[Solaris-5.11-required]

……

[Solaris-5.11-optional]

……

注意:因为Oracle 10g R2 for Solaris x86的默认Solaris版本是Solaris 10。

     c. 启动OUI

$./runInstaller

一旦oracle数据库的安装界面起来了,后面的安装就简单了,其中在系统检查是发现系统是Solaris 11,会出现警告,忽略就行了。
 

9. 启动oracle数据库。类似于在Windows中开启数据库监听服务和数据库实例服务

 

#su oracle
$lsnrctl start
$sqlplus 
"/ as sysdba"
sql>startup
sql>exit
$

 10. 在服务器端,启动OEM管理器。类似于在Windows中开启OEM管理服务

 

$emctl start dbconsole

 11. 停止OEM管理器

 

$emctl stop dbconsole

 注意:如果启动OEM管理器时,系统提示说系统中已有一个OEM管理器实例在运行了,但是浏览器中输入http://jinsonghu:1158/em后,却打不开OEM管理页面,则先停止当前实例的运行,即先运行emctl stop dbconsole,再重新启动OEM管理器,emctl start dbconsole。

1
2. 停止oracle数据库

 

$sqlplus "/ as sysdba"
sql>shutdown immediate
sql>exit
$lsnrctl stop

Saturday Sep 20, 2008

默认情况下.Solaris10安装完成后.启动是cde界面.但有时用xmanager登录时始终无法建立连接. 如果确认不是防火墙等方面的原因.可以用如下方法解决

      1. 关闭默认的cde服务
          svcadm disable cde-login
          用ps-ef|grep dtlogin 应该看不到dtlogin进程了
      2. 进入/etc/X11/gdm
          编辑gdm.conf文件(也有可能是这两个文件/usr/share/gdm/defaults.conf 和/etc/X11/gdm/custom.conf) 编辑如下2个地方

         找到[xdmcp]字段. 
         将Enable=flase改为true
         将Port=177前的注释取消

         然后保存退出.
       3.ps-ef|grep gdm 确认目前没有gdm进程.如有杀之
       4. 启动gdm服务

       # svcs -a|grep gdm
disabled       Aug_07   svc:/application/gdm2-login:default
# svcadm enable svc:/application/gdm2-login:default

然后在xmanager里建立新连接. 这样就可以登录了. 在登录界面的左上角选择cde.熟悉的cde界面就又回来了. 


Tuesday Sep 02, 2008

When I wanna migrate my operation system from Windows to Solaris, i've encounter lots of problems.

So I intend to launch a win-apart program which imply that I will leave windows system.

This time, Mail setting and filter is an issue.

My thunderbird in Windows has set up a filter group. Now I would like to migrate it to Thunderbird for Solaris.

Finally, thunderbird provides a plugin for that ,

download from here

Thursday Jun 12, 2008

download from here

Wednesday Jun 11, 2008

Click Here (Sun internal only)

This blog copyright 2009 by Ding-Ze Hironics Zhu