Wednesday, December 2, 2009

Ubuntu root密码设置 or 切换用户

Ubuntu 8.10
在安装时,没有设置root密码,所以这就必须在安装完成后设置 命令如下:
$ sudo passwd root
输入你希望的root用户的密码------------------------------------------------------------------------------------------------------------------------------------------------------
ubuntu用户管理

root 用户为根用户,也就是 系统管理员 拥有全部权限 一个用户只能拥有一个 GID ,但是还可以归属于其它附加群组

用户管理的重要配置文件:
/etc/passwd 用户名 密码位 UID 归属GID 姓名 $HOME目录 登录Shell/etc/shadow 用户名 已加密密码 密码改动信息 密码策略/etc/group 群组名 密码位 GID 组内用户/etc/gshadow 群组密码相关文件,不重要/etc/sudoers 用户名 权限定义 权限[/pre]可以使用 pwconv 命令创建影子密码,将 /etc/passwd 文件中的密码转换到 /etc/shadow 文件

su [用户名]
切换到其它用户,默认切换到root用户。提示密码为将切换用户密码 -f 快速切换,忽略配置文件-l 重新登录-m ,-p 不更改环境变量-c <命令> 切换后执行命令,并退出切换

sudo [命令]
以其它用户的身份执行命令,默认以root的身份执行。提示密码为当前用户密码 -s 切换为root shell-i 切换为root shell,并初始化-u <用户名UID> 执行命令的身份-l 显示自己的权限

passwd [用户名]
设定用户密码

-d 清除密码-l 锁定用户-e 使密码过期,在下次登录时更改密码-S 显示密码认证信息-x <天数> 密码过期,最大使用时间-n <天数> 冻结密码,最小使用时间-s 更改登录Shell-f 更改用户信息

示例:
$passwdChanging password for user(current) UNIX password: 原密码Enter new UNIX password: 新密码Retype new UNIX password: 确认新密码[/pre

chsh [-s ] [用户名]
更改登录Shell

挂载 USB
若/proc/bus/usb下没有相应USB设备信息,应输入以下命令将 USB 设备文件系统手动挂装到 /proc/bus/usb:
# mount -t usbfs none /proc/bus/usb
为了在系统引导时自动挂装 USB 设备文件系统,请将下面一行添加到 /etc/fstab 中的 /proc 挂装行之后: none /proc/bus/usb usbdevfs defaults 0 0

插入usb后:
sudo mount /dev/sdb1 /mnt/usb/ -t vfat -o iocharset=gb2312 #注意gb2312

配置上网***********************

Ubuntu的网络参数保存在文件 /etc/network/interfaces中,默认设置使用dhcp,内容如下:
# The primary network interface
auto eth0
iface eth0 inet dhcp

按你的修改:
1)编辑 /etc/network/interfaces =》vim /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.1.183
netmask 255.255.255.0
gateway 192.168.1.1

2)编辑 /etc/resolv.conf,设置dns
nameserver 110.120.119.114
nameserver 110.120.119.114

------------------------------------------------------------------------------------------------------------------------------------------------------
其它命令:
一、安装Grub
$ grub
$ find /boot/grub/stage1
(hd0,*)
$ root (hd0,*)
$ setup (hd0,*)
$ quit
$ sudo dd if=/dev/sda(*+1) of=\ubuntu.lnx bs=512 count=1
将ubuntu.lnx文件复制到Windows的根目录下,比如C:\,修改boot.ini,添加C:\ubuntu.lnx="Ubuntu 7.10"。

二、语言支持与软件更新
系统–>管理工具–>软件源–>下载自:–>其他…–>台湾–>tw.archive.ubuntu.com–>选择服务器–>关闭–>重新载入
系统–>管理工具–>语言支持(Language Support)–>支持的语言–>Chinese–>应用–>确定 $ sudo apt-get update
$ sudo apt-get upgrade

三、安装nVidia显卡驱动
下载NVIDIA-Linux-x86-100.14.19-pkg1.run。登录控制台(按下ctrl+alt+F1~F6任一)。
$ sudo /etc/init.d/gdm stop
$ sudo apt-get install build-essential #或只安装libc6-dev
$ sudo sh NVIDIA-Linux-x86-100.14.19-pkg1.run
$ sudo /etc/init.d/gdm start

四、安装字体
如果字体文件都保存在/home/(user_name)/fonts里
$ cd /usr/share/fonts/
$ ln -s /home/(user_name)/fonts myfonts/
#或者 $ mkdir myfonts
# $ cp /home/(user_name)/fonts/* myfonts/
$ cd myfonts/
$ sudo mkfontscale
$ sudo mkfontdir
$ fc-cache
系统–>首选项–>外观–>字体,在这里修改。

五、输入法SCIM
$ sudo im-switch -s scim -z default
$ sudo apt-get install scim-qtimm
$ sudo apt-get install scim scim-pinyin scim-tables-zh im-switch scim-qtimm scim-bridge scim-bridge-client-gtk scim-bridge-client-qt scim-bridge-agent
$ gksu gedit /etc/X11/xinit/xinput.d/scim
将默认的 GTK_IM_MODULE=scim 修改为 GTK_IM_MODULE="scim-bridge"。
另外,在scim输入法中进行了如下设定:scim设置->全局设置->将预编辑字符串嵌入到客户端中 前的勾去掉;scim设置->gtk->嵌入式候选词标的勾去掉。

六、NTFS分区读写支持
UBUNTU7.10默认就支持NTFS分区的读写,可是不完美,对NTFS分区下的中文文件支持不好,你会发现找不到中文的文件。
$ sudo apt-get -y –force-yes install ntfs-3g
$ sudo apt-get -y –force-yes install ntfs-config
$ [ -x /usr/bin/ntfs-3g ] && sudo ln -sf /usr/bin/ntfs-3g /sbin/mount.ntfs
$ gksudo ntfs-config &
$ set +v

七、媒体播放器的安装
$ sudo apt-get install mplayer mozilla-mplayer totem-xine libxine1-ffmpeg
下载w32codecs_20061022-0.1_i386.deb包并安装
mplayer调试(视频、字幕):启动mplayer,右键->Preferences->Video;Available drivers选择xv;然后进入Font标签 Font里选择一个中文字体,Encoding里设置为Simplified Chinese charset (CP936)。 $

八、安装解码器、flashplayer、java虚拟机、微软字体
多媒体解决方案是:一般普通的播放任务使用 Totem 电影播放机,如果遇到不能播放的情况或者看大碟时就选用 Mplayer ,播放音乐使用 audacious。
装多媒体软件和相应解码器:安装audacious Ubuntu中类似千千静听的的播放器,支持播放 ogg*, flac*, mp3, wma, wav, 3gp 这些格式。安装 mplayer 和 totem (播放 xvid/divx 编码的 avi 格式视频, rm/rmvb/asf/wmv 等流媒体视频,外加 vcd/dvd和其他 mpeg2/mpeg4 视频。)
为了方便所以来个一键全媒体方案:
$ sudo apt-get install mplayer mozilla-mplayer totem-xine libxine1-ffmpeg audacious ffmpeg gstreamer0.10-plugins-ugly gstreamer0.10-pitfdll gstreamer0.10-ffmpeg gstreamer0.10-* lame faad sox mjpegtools gstreamer0.10-* totem-xine ffmpeg lame faad sox mjpegtools sidplay-base xsidplay libggi-target-x libggi-target-emu libggi-target-monotext toolame mpeg2dec avifile-divx-plugin avifile-xvid-plugin mencoder drip libavifile-0.7c2 mpg123-el flac123 mpc mpd gmpc sonata gxine totem-xine kaffeine flac beep-media-player-* xine-ui bmpx gstreamer0.8* vlc
win32codes下载:http: //archive.ubuntu.org.cn/ubuntu-cn/dists/edgy/main/binary-i386/media/w32codecs_20060611 -1plf6.10_i386.deb;ftp://211.86.156.210/debian- multimedia/pool/main/w/w32codecs/w32codecs_20061022-0.0_i386.deb

九、安装RAR压缩/解压缩程序
$ sudo apt-get install rar
建立软链接:
$ sudo ln -fs /usr/bin/rar /usr/bin/unrar
这样,以后只要在命令行输入unrar,就可以解压或者压缩文件了,安装完成后,归档管理器也同时集成了rar组件。

十、Firefox插件
1. DownThemAll
2. Super DragAndGo
3. Fasterfox
4. MediaWarp https://addons.mozilla.org/en-US/firefox/addon/1879
5. FlashGot:https://addons.mozilla.org/en-US/firefox/addon/220
6. 更快速的打开网页,在firefox浏览器地址拦里输入about:config 找下面的选项进行修改吧: network.dns.disableIPv6 -> true
network.http.pipelining -> true
network.http.pipelining.maxrequests -> 8(8-24这是我自己的设置) network.http.proxy.pipelining -> true

十一、安装3D桌面:
Compiz Fusion,Emerald,Avant Window Navigato,Screenlets
1. 安装显卡驱动
如果是新装的Ubuntu,还没有安装显卡驱动,可以先到系统–>系统管理–>受限驱动管理器中启用受限制的驱动。
解决启动compiz后最大化、最小化、关闭按钮的标题栏消失的问题:
$ sudo nvidia-xconfig –add-argb-glx-visuals #解决没有窗口边框的问题
$ sudo gedit /etc/X11/xorg.conf
在"Module"段加入子段: SubSection "extmod"
Option "omit xfree86-dga"
EndSubSection
在"Device"段中加入:
Option "AddARGBVisuals" "True"
Option "AddARGBGLXVisuals" "True"
Option "DisableGLXRootClipping" "True"
Option "AllowGLXWithComposite" "True"
Option "RenderAccel" "True"
在配置文件的最后加入:
Section "Extensions"
Option "Composite" "Enable"
EndSection
2. 添加密钥和软件源(步骤2使用7.04的朋友需要做的!!!而使用7.10的朋友不需要做!!因此,跳过)

3. 下载安装Compiz和Compiz Fusion
$ sudo apt-get install compiz compiz-gnome
$ sudo apt-get install compizconfig-settings-manager
$ sudo apt-get install compiz-fusion-*

4. 启动Compiz Fusion了。同时按下Alt+F2,输入compiz –replace即可启动。
5. 定位到系统–>首选项–>CompizConfig Settings Manager,打开后可以对效果进行自定义:
立方体效果: 同时按下ctrl+Alt+鼠标左键(Button 1)。这个和Beryl下是一样的。
火焰字: 在左侧类别栏目的Effect下,勾选"在屏幕上绘制火焰".同时按下Shift+Win(Super)+B1,退出火焰字同时按下Shift+Win+C。
层叠效果: 在左侧类别栏目的Windows Management下,勾选Shift-Switcher。Win+Tab(和Vista下一样)。
桌面缩放: Win+鼠标滚轮。
屏幕飞雪: 在左侧类别栏目的Extra下勾选飞雪.同时按下Win+F3。

6. Compiz Fusion系统托盘管理图标的安装
$ sudo apt-get install git git-core compiz-dev
$ git-clone git://anongit.opencompositing.org/users/crdlb/fusion-icon
$ cd fusion-icon/
$ make
$ sudo make install
安装完毕后在主菜单的系统工具下可以找到compiz fusion icon启动即可。如果你希望在进入系统时自动启动可以系统–>首选项–>会话,新建一个新会话,填入fusion-icon就可以了。

7.
其他
1、解决PDF电子文档的中文乱码
$ sudo apt-get install xpdf-chinese-simplified xpdf-chinese-traditional

2、安装JAVA环境和JDK
$ sudo apt-get install sun-java6-jre
$ sudo apt-get install sun-java6-jdk
设置当前默认的java解释器
$ sudo update-alternatives –config java
输入有包含"sun"的行的前面的数字
安装浏览器的JAVA Plugin(可选)
$ sudo apt-get install sun-java6-plugin

3、安装编译工具
建议安装上 gcc,g++,make 等。
$ sudo apt-get install build-essential

4、因为经常会用到终端:所以把终端加到右键菜单:
$ sudo apt-get install nautilus-open-terminal
这就终端就在右键菜单了可以了!!

5. 有必要学会以root权限打开文件夹
$ sudo apt-get install nautilus-gksu
这样右键单击文件或文件夹,选择以管理员打开!!!

6. 查看隐藏文件是:Ctrl+ H

7、启用root(最高权限)帐户 $ sudo passwd root 输入你希望的root用户的密码

http://hi.baidu.com/xingxing_whu/blog/item/b3b9b2df7d848e1b49540334.html

Ubuntu的root密码是什么(How to set the password for root in UTUNBU)

Ubuntu安装后root不能够登录的并且也是没有默认的密码的,因为你还没给root设置密码,你第一个 user 是在 admin 组 ,所以他可以给 root 设置密码 。

给root用户设置密码。
具体步骤是打开终端(应用程序--附件--终端),然后输入下面的命令
sudo passwd root

回车后会出现让你输入密码和确认密码,例如这样
[sudo] password for you :---> 输入你的密码(你现在这个用户的密码),不回显
Enter new UNIX password: --- > 设置root 密码
Retype new UNIX password: --> 重复这样这样你的root的密码设置好了

第二步就是要启用root用户,因为root默认是不启用的。所以要在System->Administration->Users and Groups. Choose root and unlock it.

然后注销后就可以登录了!

http://wuxiong8665.blog.163.com/blog/static/93512200961184643307/

MPICH2简单的安装配置总结 (含Linux下的安装配置和单机运行) zz

MPICH2是MPI(Message-Passing Interface)的一个应用实现,支持最新的MPI-2接口标准,是用于并行运算的工具,在程序设计语言上支持C/C++和Fortran。最近因为有项目需要的计算量比较大,所以就学习使用了MPICH2,在此根据网络上查询的相关信息和我自己的实际使用经历,分别总结一下MPICH2在windows和linux下基本的安装使用方法。


软件下载


MPICH2的主页是http://www-unix.mcs.anl.gov/mpi/mpich2/index.htm,在这个页面上就能找到各平台最新版本MPICH2的下载地址,其中还包括源代码,我在开始作这个项目的时候最新版本是windows版mpich2-1.0.5p2,源代码mpich2-1.0.5p4。我们的项目是一个CentOS版linux下的程序,所以最终是要在linux下运行的,但是又舍不得windows,于是就打算可能的话就在windows下写程序,用MinGW加windows版的MPICH2编译调试,通过后再到wmware虚拟机组成的简单集群作测试。所以,为避免不必要的麻烦,就要统一一下windows和linux下的MPICH2版本,而且不打算用最新的,因此决定用mpich2-1.0.5版。但是,如果在主页上找的话是没有以前旧版本下载的链接的(至少我没找到),只有最新版本的http和ftp下载。这难不住我等有心之人,既然提供了ftp下载,那咱就直接到他ftp服务器上找,最新源代码链接的地址是ftp://ftp.mcs.anl.gov/pub/mpi/mpich2-1.0.5p4.tar.gz,把后面文件名去掉就应该是文件的ftp存放路径,把这个路径直接写到浏览器地址栏里回车(偶用的是FireFox2),就能看到他们服务器上这个目录的文件列表,里面就有1.0.5版的windows安装文件和源代码包,分别为ftp://ftp.mcs.anl.gov/pub/mpi/mpich2-1.0.5-win32-ia32.msi 和 ftp://ftp.mcs.anl.gov/pub/mpi/mpich2-1.0.5.tar.gz 。msi文件不用多说,这是windows下安装用的,源代码包我们拿来在linux下用。


文档下载


还是主页上就有MPICH2的安装和使用指南文档,主要有三个,分别是User's Guide,Installer's Guide和Windows Developer's Guide,都down下来看看很有用的说。具体开发用的有关MPI标准的文档在MPI论坛的网站里都有,地址是http://www.mpi-forum.org/,我觉得最有用的是MPI-2: Extensions to the Message-Passing Interface。


Windows下的安装配置


我用的参与计算的系统都是WindowsXP Pro SP2,安装的过程没什么太特别的,一般就是默认就可以,只是其中有个地方要填一个什么passphrase,上面提示说所有系统都要用相同的passphrase,照做就是了,在所有参与计算的结点机器上都填一样的passphrase就好了。另外就是需要.net framework 2的运行环境。

默认安装的位置是C:\Program Files\MPICH2,下面的bin目录下是系统配置运行需要的程序,为了方便在控制台使用,可以把C:\Program Files\MPICH2\bin加到系统的PATH变量中去。Include是头文件,开发的时候用,lib是链接程序的时候用的库文件。Jumpshot下有个pdf的文档,干什么用的可以看看这个文档,我没仔细看,感觉我暂时还用不上。Examples下面是一个样本程序,就是一个用MPI计算圆周率的程序,分别有C,C++和Fortran版,C/C++的应该可以用VS2003以上版本打开。同时,安装程序还会自动向系统注册一个服务MPICH2 Process Manager,我们从控制面板-管理工具-服务里就能找到,这是管理运行MPI程序的一个服务,安装好后就是自动启动的,所以一般也就不用动它。

安装完毕后开始菜单-程序中就添加了一个MPICH2目录,其中就有上面提到的Jumpshot,另外wmpiconfig.exe是用来配置运行环境的,我在网上有找到的说明都是以前旧版本的,和现在的差别比较大,感觉这新版本用的不爽,没搞明白这个程序该咋用,不过好像默认状态下不改什么就能正常使用,所以也就不管它了。wmpiregister.exe则是用来注册用户的,使用MPI之前需要在这个程序里注册一个系统里已经存在的用户,而且这个用户必需拥有管理员权限,拥有运行我们安装了的MPI系统的能力。比如我就在所有参与运算的机器上添加了一个管理员mpi,密码也是mpi。

接下来,我们就可以开始试着运行一下MPI的程序了。就用examples目录下面的那个计算圆周率的程序。如果要多机并行计算的话,就需要在所有机器上的相同位置放置要运行的程序,我的情况就是在所有机器的C盘下建了一个mpiexe的目录,并把cpi.exe拷到所有机器的这个目录下。然后,在其中的某台机器上进入控制台(运行MPI程序其实也可以用开始菜单的MPICH2下的wmpiexec.exe,这是个gui程序,但是我觉得用的不爽,不如直接在控制台下敲命令来得灵活),敲下命令mpiexec -hosts 2 192.168.10.142 192.168.0.23 c:\mpiexe\cpi.exe。mpiexec是安装目录下bin目录里的一个程序,在本文的例子中就是C:\Program Files\MPICH2\bin\mpiexec.exe,因为刚才说了,我把这个地址加入到PATH里了,所以可以在任何地方直接执行,它是用来启动MPI程序的,-hosts参数说明是启动多台机器并行运算,后面跟着的2就是说要在两台机器上执行程序,再后面的就是那两台机器的ip地址,其中第一个就是我启动程序的机器,当然,这个地方也可以写机器名,只要它的机器名能被正常的解析就可以,最后面的就是要运行的程序,也就是刚才提到的所有机器都要在相同位置放置的那个MPI程序。如果只是在本机运行,则命令为mpiexec –n 2 cpi.exe,-n表示是在本地运行,后面的2表示启动的进程数。程序运行后就会提示让你输入一个数字intervals,这个数字影响计算的精度,值越大精度越高,当然计算时间就越长了,然后程序会打印出计算的结果和花费的时间。

比如,我使用单机单进程运行,intervals设为99999999,耗时1.253849秒,而用两台机器双进程则只有0.628954秒,明显快很多,并行运算还是很有效果的。不过,如果我们把intervals改为9999,单机运行只用了0.000279秒,而两台机器却花了0.001548秒,这是因为并行运算过程中,参与运算的机器需要通过网络传递一些消息,如果计算量不大的话,花在了这上面的时间影响会比较明显,因而反不如单机版的来得快。

到现在我们的MPI运行环境就基本安装好了,当然,MPI还有很多其他的命令参数,只不过最常用估计也就这两条了,其他的用得着的时候就去查上面提到的文档,里面有比较详细的介绍。另外,如果按照以上的介绍进行安装配置,在运行多机并行MPI程序的时候却出现连接错误的话,八成是因为网络的问题,看看你的防火墙是不是开着,打开相应的端口,或者干脆关掉防火墙就好了。



Linux下的安装配置和单机运行

Linux下的操作要相对来说麻烦一点,这个麻烦从安装开始,呵呵。我用的系统是CentOS4.4,装在VMware Workstation里的,一共装了两个虚拟机,环境基本上完全一样。为运行MPI在两台虚拟机都创建了一个用户mpi,密码也是mpi,home路径也都是/home/mpi,然后继续都创建了一个目录/home/mpi/mpich2用来作MPI运行环境的安装路径,一个/home/mpi/mpich2/src来存放编译用的源代码。然后将源代码包mpich2-1.0.5.tar.gz下载到两台机器上,都解压缩到/home/mpi/mpich2/src中,然后到/home/mpi/mpich2/src下,指定安装路径,

./configure -prefix=/home/mpi/mpich2

make

make install

几分钟后安装完毕。需要提一下的是,我曾经试着用root用户来安装MPICH2,但是安装后好重启系统就出了问题,所以建议还是另外建个用户来装吧(ubuntu干脆就把root给禁了,不让你直接用root)。

安装后/home/mpi/mpich2下多出来一些目录和文件,要比windows多,lib是库文件,include是头文件,bin还是程序文件,所以还是要写到环境变量里,可以用命令export PATH /home/mpi/mpich2/bin:$PATH,但我是用root用户直接在/etc/profile最后面加了这么一句export PATH=/home/mpi/mpich2/bin:$PATH,一劳永逸。

MPI应用一个管理器来管理运行MPI程序,这个管理器就是mpd,但是在正式开始运行mpd前还需要一个基于安全考虑的配置文件,.mpd.conf,这个文件是要放在运行程序的用户的home目录下,本例子中就是/home/mpi/.mpd.conf,而且这个文件只能由这个用户读写,创建文件的命令是,

cd $HOME

touch .mpd.conf

chmod 600 .mpd.conf

然后在文件中写入这么一行,secretword=***,***在参与计算的计算机上必需完全一致。如果是root用户的话,这个文件应该是/etc/mpf.conf。

然后,我们就可以启动mpd管理器了,直接在控制台下使用mpd命令,或者是mpd &,让mpd在后台运行,若关闭启动的mpd,只需要命令mpdallexit即可。在启动mpd之后就可以运行MPI应用程序了,执行命令与windows下类似,如我们仍然是测试一下examples里的cpi程序可以这样来作,

cd ~/mpich2/examples

mpiexec -n 1 ./ cpi

参数含义同windows下的单机运行命令。另外,启动mpd后还可以用命令mpdtrace来察看当前运行的mpd情况。


SSH配置和多机并行

MPI的多机并行是用mpdboot来管理启动的,是由参与计算的其中一台机器通过mpdboot同时启动其他机器上的mpd管理器并运行相应MPI程序的,所以,需要赋予运行mpdboot的机器执行其他机器上程序的能力。MPICH2支持通过ssh和rsh来做到这一点,其中ssh是默认的,而且其安全性也优于rsh,因此,我在项目中是用的ssh。

首先,我们需要修改所有机器上的/etc/hosts文件,在里面添加上参与计算的机器名和ip地址,比如本文中有两台机器参加的例子里,hosts文件应当为:

127.0.0.1 localhost.localdomain localhost

192.168.10.142 node0

192.168.10.23 node1

这里的意思是说,主机名为node0的机器ip地址为192.168.10.142,主机名为node1的机器ip地址为192.168.10.23。

当然,其实这一步也可以跳过,因为我们也可以在操作过程中直接使用ip地址,只不过那样不太方便。另外就是,有些机器默认情况下第一行可能包括本机的主机名,比如在ip为192.168.10.142的node0上,hosts文件第一行是

127.0.0.1 localhost.localdomain localhost node0

这样可能会使得mpdboot工作不正常,所以还是最好给成上面的那种形式。

第二步是创建ssh密钥,命令行下:

#ssh-keygen -t rsa

-t rsa指的是密钥类型,具体请察看ssh相关资料,这里不多说。这样就在当前用户的home目录下生成了一个.ssh目录,本文中的就是/home/mpi/.ssh。

第三步,将/home/mpi/.ssh下的id_rsa.pub文件拷贝改名为authorized_keys,即

#cp id_rsa.pub authorized_keys

第四步,在其他所有机器上进行以下操作。

#ssh-keygen -t rsa 生成.ssh文件夹

#scp node0的IP:/home/mpi/.ssh/* ~/.ssh 拷贝node0上的.ssh文件夹覆盖本地的

第五步,在所有机器上建立与自己和所有其他机器的信任连接。

对每个节点执行:

#ssh node0

#ssh node1

根据提示键入yes即可。然后就可以在不需要用户名密码的情况下通过ssh登陆其他机器了,比如在node0上#ssh node1,

就可以直接进入node1。

接下来,在启动mpdboot的机器上创建一个参与计算的host列表文件,如文件mpd.hosts,每行是一个主机名,创建过程如

#cd ~

#touch mpd.hosts

#vi mpd.hosts

nod0

node1


现在,就可以启动运算集群了

#mpdboot -n 2 -f mpd.hosts

-n表示要启动的机器个数,一般是不大于mpd.hosts文件中的机器数,比如本文中的例子就是两台机器。这样,列表中的机器就会启动其本机上的mpd管理器。

然后,就可以开始运行MPI程序,进行运算了,同windows下一样,程序需要放在每台机器上的相同位置(如果用NFS就只需在一台机器上放置程序,其他机器作映射就行),比如都是程序/home/mpi/mpich2/examples/cpi,在运行mpdboot 的结点机器上:

#mpiexec -n 2 /home/mpi/mpich2/examples/cpi

-n表示要启动的进程个数,一般是不大于mpd.hosts文件中的机器数(或者cpu核心数?偶用的机器就是双核的了,所以单机的时候双进程比单进程效率好很多,但是三进程就不行)。

Mpd在运行过程中,可以通过mpdtrace显示参与计算的机器名,mpdtrace –l则是显示机器名以及其端口。


http://hi.baidu.com/andy1lee/blog/item/79d492a716661693d0435829.html

linux平台下mpich2的安装以及如何运行并行程序 zz

From : http://hi.baidu.com/%B2%DD%B8%F9%CE%DE%B4%FD/blog/item/dcb32844961d4348500ffe0f.html

网上有很多资料,一搜一大片,其实很多雷同,而且是根据官方文档翻译过来的。在下载mpich2时就能下载到相应的帮助文档,安装过程在mpich2-doc-install.pdf(或mpich2-doc-README.txt)中说的很是详尽了!我仅把自己的安装过程和遇到的问题写下来。

我的计算环境是一个32CPU的集群,想在自己的帐户下安装mpich2-1.0.6,我的帐户目录为/home/mat04/ 。首先将mpich2-1.0.6拷贝到一个目录下,假设为/home/mat04/software/,接着如下:

cd /home/mat04/software/
tar zvxf mpich2-1.0.6.tar.gz
cd mpich2-1.0.6
makdir ~/mpich2-1.0.6/
makdir ~/tmp
./configure --prefix=/home/mat04/mpich2-1.0.6/ 2>&1 tee configure.log
make 2>&1 tee configure.log
make install 2>&1 tee configure.log

几点说明:
1、 由于 ./configure使用了选项--prefix ,所以在前面要先创建目录makdir ~/mpich2-1.0.6/。2、 安装的过程需要一个临时文件夹,所以makdir ~/tmp,要是没有这个tmp目录的话, ./configure总是出错。
3、 ./configure,make,make insatll中使用的 2>&1 tee ***.log 是要产生相应的log文件。
4、 与windows版本不同的是:在include文件夹下有mpi.mod,而windows下的include文件夹下则没有mpi.mod文件。windows下需要自己写一个mpi.mod,在前面的文章里有阐述。

然后,就是要将/home/mat04/mpich2-1.0.6/bin写入环境变量PATH里:
vi ~/.bashrc
插入三行:
# mpich2 variables :PATH=/home/mat04/mpich2-1.0.6/bin:$PATH
export PATH
保存退出,再source .bashrc

测试一下:
which mpirun
which mpif77
which mpd
结果应该是:
~/mpich2-1.0.6/bin/mpirun
~/mpich2-1.0.6/bin/mpif77
~/mpich2-1.0.6/bin/mpd
那就安装完成了,简单~~~,可以写一个简单的helloworld程序测试一下,当然也可以用它的cpi。

遇到的问题:
安装完成后发现/home/mat04/mpich2-1.0.6/bin目录下没有mpif90,而mpif77,mpicc,mpicxx都有。我就是要写90程序啊,就需要mpif90。不知道出了什么问题,卸了重装,换mpich2-1.0.3,问题依旧。倒是mpich-1.2.7没问题,装完就什么都有了,但是没有mpdboot,这也是我需要的啊。

昨天我针对这个问题给mpich写了封信,不知道能不能回复呢,呵呵。等不了那个,就先问了问小董,他对mpi挺熟悉的。他说是fortran编译器的问题。因为在我的帐户下装了pgf和intel两个fortran编译器,安装mpich2时,./congfigure步骤中关于fortran90的选项时认的是pgf90,而没有认intel的ifort。若把环境变量中的pgf去掉,只剩下intel的,再./configure时自然认的是ifort,安装完后在bin/目录下也有了mpif90。但是为什么pgf90不行,ifort行呢?不知道,他说在机房的10号机上只有pgf时是可以的,如果pgf和intel同时存在,不知道会怎么样。经过这个问题,我就把pgf彻底注释掉了,以后只用一个intel编译器。

最后,在集群环境下如何运行mpi程序。

1、先写一个mpd.hosts文件,里面写上要起动的节点,在1号机上有8个能用的节点oscarnode01-oscarnode08,就在里面写上这8行:
oscarnode01
oscarnode02
oscarnode03
oscarnode04
oscarnode05
oscarnode06
oscarnode07
oscarnode08
当然也可以把主节点simserver01也写进去。

2、启动节点: mpdboot -n 2 -f mpd.hosts
2代表2台机器,在这里就是两个节点。此时启动的是mpd.hosts中最前面的两行,即1,2节点,因为1,2节点都已经坏掉了,所以应该把oscarnode03和oscarnode04写在最前面。若mpdboot -n 9 -f mpd.hosts则会出错了,因为没有那么多个节点可用啊~~~

3、提交任务:mpiexec -n 4 ./helloworld
两个节点有4个CPU,当然要使用4个进程了,就是提了8个进程,也是在这4个CPU上运行。

4、退出:mpdallexit

几点说明:
1、虽然mpd.hosts启动的是3,4节点,但要是站在主节点simserver01上提任务,主节点上便会有任务进程运行,尽管主节点simserver01并不在mpd.hosts中。所以要先ssh oscarnode04进入一个节点中,再提交任务。
2、在集群环境中提交castep,pwscf,vasp等任务多用作业管理程序,如PBS。自己写的mpi程序也应该用pbs提交,试了几次不太理想,没有完全成功,pbs脚本还是不太会写。等成功了再写一篇文章吧。

写完这篇文章后,看了看邮箱,mpich回信了,原因跟小董说的一样,就是configure没找到f90编译器,老外的工作效率就是高啊,前天下午发的邮件,昨天早晨就回了,我今天下午才看见,是我耽误了自己啊,呵呵,其实是我写信的时候觉得他不一定能给我回复啊。以下是他的回复:The configure.log file you sent was empty. But it is possible that configure could not find the Fortran 90 compiler. You can specify the Fortran 90 compiler by setting the environment variable F90 to the name of the compiler and then rerunning configure, make, make install. Also make sure the f90 compiler is in your default path, or provide the full path in the F90 environment variable.

Linux 中设置MPICH2的环境变量

有两种方法:

1、修改profile文件: #vi /etc/profile 在里面加入:
export PATH=/home/tliu/mpich2-install/bin:$PATH

2. 修改.bashrc文件: # vi /root/.bashrc 在里面加入:
export PATH=/home/tliu/mpich2-install/bin:$PATH

这两种方法一般需要重新注销系统才能生效,最后可以通过echo命令测试一下:
# echo $PATH 看看输出里面是不是已经有了/my_new_path这个路径了。

Tuesday, December 1, 2009

VirtualBox下Windows Host Ubuntu Guest共享文件夹的设置-2

作者RunningOn。
所谓Windows Host Ubuntu Guest,就是指VirtualBox安装在Windows下,VirtualBox里虚拟的操作系统是Ubuntu。这样的配置在大学里很常见,为了做实验又不想装独立Linux,一般就这样配置。本文里用的Windows是指Windows XP SP2,VirtualBox和Ubuntu都是最新的,即VirtualBox1.5.6和Ubuntu 8.04(Hardy Heron)。

本来Linux Guest安装共享文件夹比较麻烦,但在WindpwsXP和最新的VirtualBox和Ubuntu下,事情变得非常简单。如果你的系统不符合这些条件,那么安装方法请见VirtualBox的end user manual。废话不多说,让我们开始吧。共分三步:

1. 首先要安装虚拟电脑工具包
我假设你的VirtualBox1.5.6和Ubuntu8.04已经安装完毕,启动VirtualBox,运行Ubuntu并登录,然后在VirtualBox的菜单里选择"设备"->"安装虚拟电脑工具包",你会发现在Ubuntu桌面上多出一个光盘图标,这张光盘默认被自动加载到了文件夹/media/cdrom0,而且/cdrom自动指向这个文件夹。默认设置下文件管理器会自动打开这张光盘,可以看到里面有个"VBoxLinuxAdditions.run"文件。

打开一个命令行终端,依次输入"cd /cdrom"和"sudo sh ./VBoxLinuxAdditions.run",不含双引号,开始安装工具包。安装完毕,会用英文提示要重启Ubuntu,建议立刻重启。

重启后,比较明显的变化是鼠标是共享模式,并且剪贴板也和Windows共享了。如果有这些变化,说明虚拟电脑工具包已经装成功。

2. 下一步设置共享文件夹。
这里只介绍图形界面的设置方法,命令行方式的不做介绍,也不推荐,因为没必要。如果Ubuntu正在运行,请右键点击对应的VirtualBox窗口右下角的共享文件夹图标(在鼠标图标的左边),打开共享文件夹的设置窗口。如果Ubuntu没有运行,在VirtualBox界面左边的列表中选择ubuntu虚拟机,并在右边的列表中单击“共享文件夹”,也可以打开同样的共享文件夹设置窗口。在共享文件夹设置窗口中,单击右侧的"添加一个共享文件夹",路径选择你想要共享的Windows文件夹,共享名任取一个自己喜欢的,比如"myshare",选项read-only是指是否只允许ubuntu读这个文件夹,请根据需要选择这个选项。搞定后点确定并关闭窗口。

3. 再要在ubuntu下挂载这个共享文件夹。
在Ubuntu下的命令行窗口里输入"sudo mount -t vboxsf myshare /media/share",不含双引号。其中"myshare"是之前取的共享文件夹的名字,"/media/share"是要挂载到的目标文件夹,是我事先已经建好了的,最好是个空文件夹。

到此一般就搞定了,Windows下的共享文件夹,对应Ubuntu下的我建立的"/media/share",你可以试试在Ubuntu下能不能操作那个共享文件夹。

默认设置下是支持中文的,如果有乱码,请查找与磁盘挂载相关的文章。重启Ubuntu后需要重新挂载共享文件夹,即重新运行"sudo mount -t vboxsf myshare /media/share",想自动挂载,请查找修改/etc/fstab文件的文章,本文亦不做描述,另一解决办法是永远不重启Ubuntu,而是使用VirtualBox提供的快速休眠功能,即关闭VirtualBox时,选择"快速休眠"。大部分情况下,休眠就可以了,快且方便。

Thursday, November 26, 2009

Linux下C语言编程基础知识 (zz)

Linux下C语言编程基础知识
作者:Hoyt Em ail:hoytluo@21cn.com

作 者:Hoyt Email:hoytluo@21cn.com

前言:
这篇文章介绍在LINUX下进 行C语言编程所需要的基础知识.在这篇文章当中,我们将会学到以 下内容:
源程序编译
Makefile的编写
程序库的链接
程序的调试
头文件和 系统求助

----------------- ------------------------------ ------------------------------------------------------------------------
1.源程序的编 译
在Linux下面,如果要编译一个C语言源程序,我 们要使用GNU的gcc编译器. 下面我们以一个实例来说明如何 使用gcc编译器.
假设我们有下面一个非常简单的源程 序(hello.c):
int main(int a rgc,char **argv)
{
pri ntf("Hello Linux\n");

}

要编译这个程序,我们只要在命 令行下执行:
gcc -o hello hello. c
gcc 编译器就会为我们生成一个hello的可执 行文件.执行./hello就可以看到程序的输出结果了.命令行 中 gcc表示我们是用gcc来编译我们的源程序,-o 选项表 示我们要求编译器给我们输出的可执行文件名为hello 而he llo.c是我们的源程序文件.
gcc编译器有许多选 项,一般来说我们只要知道其中的几个就够了. -o选项我们已经 知道了,表示我们要求输出的可执行文件名. -c选项表示我们只 要求编译器输出目标代码,而不必要输出可执行文件. -g选项表 示我们要求编译器在编译的时候提供我们以后对程序进行调试的信息 .
知道了这三个选项,我们就可以编译我们自己所写的简 单的源程序了,如果你想要知道更多的选项,可以查看gcc的帮助 文档,那里有着许多对其它选项的详细说明.

-------------------------------------------------------------------------------------------------------------------------

2.Mak efile的编写
假设我们有下面这样的一个程序,源代 码如下:

/* main.c */
#include "mytool1.h"
#include "mytool2.h& quot;

int main(int arg c,char **argv)
{
mytoo l1_print("hello");
mytool2_print("hello&q uot;);
}


/* mytool 1.h */
#ifndef _MYTOOL_1_H
#define _MYTOOL_1_H
void mytool1_print(char *pr int_str);
#endif


* mytool1.c */
#includ e "mytool1.h"

void mytool1_print(char *print_s tr)
{
printf("This is mytool1 print %s\n", print_str);
}


/* m ytool2.h */
#ifndef _MYTOO L_2_H
#define _MYTOOL_2_H
void mytool2_print(cha r *print_str);
#endif


/* mytool2.c */
#i nclude "mytool2.h"

void mytool2_print(char *pr int_str)
{
printf(&quo t;This is mytool2 print %s\n&q uot;,print_str);
}


当然由于这个程序是很短的我们可以这样来编译
gcc -c main.c
gcc -c myto ol1.c
gcc -c mytool2.c
gcc -o main main.o mytool1.o mytool2.o
这样的话我们也可以产生main程 序,而且也不时很麻烦.但是如果我们考虑一下如果有一天我们修改 了其中的一个文件(比如说mytool1.c)那么我们难道还要 重新输入上面的命令?也许你会说,这个很容易解决啊,我写一个SHELL脚本,让她帮我去完成不就可以了.是的对于这个程序来说 ,是可以起到作用的.但是当我们把事情想的更复杂一点,如果我们 的程序有几百个源程序的时候,难道也要编译器重新一个一个的去编译?

为此,聪明的程序员们想出了一个很好的工具来做这 件事情,这就是make.我们只要执行以下make,就可以把上 面的问题解决掉.在我们执行make之前,我们要先编写一个非常 重要的文件.--Makefile.对于上面的那个程序来说,可 能的一个Makefile的文件是:

# 这是上面那个程序的Makefile文件
main:main.o mytool1.o mytool2.o
gcc -o main main.o mytool1.o mytool2.o
main.o:main.c mytool1.h mytool2.h
gcc -c main.c
mytool1.o:mytool1.c mytool1.h
gcc -c mytool1.c
mytool2.o:mytool2.c mytool2.h
gcc -c mytool2.c

有了这 个Makefile文件,不过我们什么时候修改了源程序当中的什么文件,我们只要执行make命令,我们的编译器都只会去编译和我们修改的文件有关的文件,其它的文件她连理都不想去理的.

下面我们学习Makefile是如何编写的.
在 Makefile中也#开始的行都是注释行.Makefile中 最重要的是描述文件的依赖关系的说明.一般的格式是:
target: components
TAB rule

第一行表示的是依赖关系.第二行是规则.
比如说我们上面的那个Makefile文件的第二行 main:main.o mytool1.o mytool2.o
表示我们的目标(target)main的依赖对象(components)是main.o mytool1.o mytool2.o
当倚赖的对象在目标修改后修改的话, 就要去执行规则一行所指定的命令.就象我们的上面那个Makefile第三行所说的一样要执行 gcc -o main main.o mytool1.o mytool2.o 注意规则一行中的TAB表示那里是一个TAB键
Makefile有 三个非常有用的变量.分别是$@,$^,$<
代表的意义分 别是:
$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件.
如果我们使用上面三个变 量,那么我们可以简化我们的Makefile文件为:

# 这是简化后的Makefile
main:main.o mytool1.o mytool2.o
gcc -o $@ $^
main.o:main.c mytool1.h mytool2.h
gcc -c $ <

mytool1.o:mytool1.c m ytool1.h
gcc -c $<

mytool2.o:mytool2.c mytool2.h
gcc -c $<


经过简化后 我们的Makefile是简单了一点,不过人们有时候还想简单一 点.这里我们学习一个Makefile的缺省规则
.c .o:
gcc -c $<


这 个规则表示所有的 .o文件都是依赖与相应的.c文件的.例如mytool.o依赖于mytool.c这样Makefile还可以变为:

#这是再一次简化后的Makefile
main:main.o mytool1.o mytoo l2.o
gcc -o $@ $^
.c.o :
gcc -c $<


好了, 我们的Makefile 也差不多了,如果想知道更多的关于Makefile规则可以查看相应的文档.

-------------------------------------------------------------------------------------------------------------------------
3.程序库的链接
试着编译下面这个程序

/* temp.c */
#include

int main(int argc,char **argv)
{
double value;
printf("value:%f\n& quot;,value);
}

这个程序相当简单,但是当我们用 gcc -o temp temp.c 编译时会出现下面所示的错误.
/tmp /cc33Kydu.o: In function `main :
/tmp/cc33Kydu.o(.text+0x e): undefined reference to `log
collect2: ld returned 1 exit status

出现这个错误是因为编 译器找不到log的具体实现.虽然我们包括了正确的头文件,但是 我们在编译的时候还是要连接确定的库.在Linux下,为了使用 数学函数,我们必须和数学库连接,为此我们要加入 -lm 选项. gcc -o temp temp.c -lm这样才能够正确的编译.也许有人要问,前面我们用printf函数的时候怎么 没有连接库呢?是这样的,对于一些常用的函数的实现,gcc编译 器会自动去连接一些常用库,这样我们就没有必要自己去指定了. 有时候我们在编译程序的时候还要指定库的路径,这个时候我们要用 到编译器的 -L选项指定路径.比如说我们有一个库在 /hom e/hoyt/mylib下,这样我们编译的时候还要加上
-L /home/hoyt/mylib.对于一些标准库来说,我们没有必要指出路径.只要它们在起缺省库的路径下就可以了.系统的缺省库的路径
/lib, /usr/lib, /usr/local/lib, 在这三个路径下面的库,我们可以不指定路径.

还有一个问题,有时候我们使用了某个函数,但是我们不知道库的名字,这个时候怎么办呢?很抱歉,对于这个问题我也不知道答案,我只有一个傻办法.首先,我到标准库路径下面去找看看有没有和我用的函数相关的库,我就这样找到了线程(thread)函数的库文件(libpthread.a). 当然,如果找不到,只有一个笨方法.比如我要找sin这个函数所在的库. 就只好用 nm -o /lib/*.so|grep sin>~/sin 命令,然后看~/sin文件,到那里面去找了. 在sin文件当中,我会找到这样的一行libm-2.1.2.so:0000 9fa0 W sin 这样我就知道了sin在 libm-2.1.2.so库里面,我用 -lm选项就可以了(去掉前面的lib和后面的版本标志,就剩下m了所以是 -lm). 如果你知道 怎么找,请赶快告诉我,我回非常感激的.谢谢!

-------------------------------------------------------------------------------------------------------------------------
4.程 序的调试
我们编写的程序不太可能一次性就会成功的,在 我们的程序当中,会出现许许多多我们想不到的错误,这个时候我们 就要对我们的程序进行调试了.
最常用的调试软件是gdb.如果你想在图形界面下调试程序,那么你现在可以选择xxgdb.记得要在编译的时候加入 -g选项.关于gdb的使用可以看 gdb的帮助文件.由于我没有用过这个软件,所以我也不能够说出如何使用. 不过我不喜欢用gdb.跟踪一个程序是很烦的事情, 我一般用在程序当中输出中间变量的值来调试程序的.当然你可以选择自己的办法,没有必要去学别人的.现在有了许多IDE环境,里面已经自己带了调试器了.你可以选择几个试一试找出自己喜欢的一 个用.

-------------------------------------------------------------------------------------------------------------------------
5.头文件和系统求助
有时候 我们只知道一个函数的大概形式,不记得确切的表达式,或者是不记 得着函数在那个头文件进行了说明.这个时候我们可以求助系统.
比如说我们想知道fread这个函数的确切形式,我们只要执行 man fread 系统就会输出着函数的详细解释的. 和这个函数所在的头文件说明了. 如果我们要write这个函数 的说明,当我们执行man write时,输出的结果却不是我们 所需要的. 因为我们要的是write这个函数的说明,可是出来 的却是write这个命令的说明.为了得到write的函数说明 我们要用 man 2 write. 2表示我们用的write 这个函数是系统调用函数,还有一个我们常用的是3表示函数是C的 库函数.
记住不管什么时候,man都是我们的最好助手 .


---------------- ------------------------------ ------------------
好了,这一章就 讲这么多了,有了这些知识我们就可以进入激动人心的Linux下 的C程序探险活动.

From: http://www.aonet.cn/artical/39/200504858.htm