XiZi's Blog

Ubuntu Linux 非root账户运行adb

在linux中,如果以非root账户运行adb命令通常回出现以下错误提示:

error: insufficient permissions for device

解决办法:给非root账户添加udev的写权限。操作如下。

添加/修改/etc/udev/rules.d/51-android.rules文件,之后重启udev服务。

对某特定品牌添加权限

#ZTE     19D2
SUBSYSTEM=="usb", ATTR{idVendor}=="19D2", MODE="0666"
#HTC 0bb4
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666"

或者你有很多的android设备,可以一次性解决

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666"

Ubuntu12.04 安装 CUDA 4.2

翻译自(http://d.hatena.ne.jp/iRiE/20120309/1331303439)

按照下列顺序进行安装

  1. Ubuntu 12.04
  2. NVIDIA 显卡驱动(devdriver_4.2_linux_64_295.41.run)
  3. cudatoolkit_4.2.9_linux_64_ubuntu11.04.run
  4. gpucomputingsdk_4.2.9_linux.run
  5. 代码编译依赖库

Ubuntu 12.04 安装

Ubuntu 的安装,网上教程不少,不会的自己百度一下。

NVIDIA 显卡驱动

sudo apt-get install nvidia-current

CUDA Toolkit

去NVIDIA的网站下载

sudo sh cudatoolkit_4.2.9_linux_64_ubuntu11.04.run

配置库,创建文件(/etc/ld.so.conf.d/cuda.conf)

## /etc/ld.so.conf.d/cuda.conf
/usr/local/cuda/lib64
/usr/local/cuda/lib

重新加载设置

sudo ldconfig

创建系统环境变量文件(/etc/profile.d/cuda.sh

## /etc/profile.d/cuda.sh
export PATH="/usr/local/cuda/bin:$PATH"
export LIBRARY_PATH="/usr/lib/nvidia-current:$LIBRARY_PATH"

修正"/usr/local/cuda/include/host_config.h"(话说这里还没实验,不知到需不需要)

--- host_config.orig.h  2012-01-27 17:20:57.689102815 +0900
+++ host_config.h       2012-01-27 17:29:32.037101532 +0900
@@ -79,7 +79,7 @@
 
 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 5)
 
-#error -- unsupported GNU version! gcc 4.6 and up are not supported!
+//#error -- unsupported GNU version! gcc 4.6 and up are not supported!
 
 #endif /* __GNUC__> 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 5) */

 

gpucomputingsdk

安装GPU_COMPUTING_SDK

sh gpucomputingsdk_4.2.9_linux.run

安装后,进入安装目录执行 make, 一般会出现以下错误。

../../lib/librendercheckgl_x86_64.a(rendercheck_gl.cpp.o): In function `CheckBackBuffer::checkStatus(char const*, int, bool)':
rendercheck_gl.cpp:(.text+0xfbb): undefined reference to `gluErrorString'

这是由于~/NVIDIA_GPU_Computing_SDK/C/common/common.mk 文件中,库文件的链接顺序问题引起的。这里主要受到库$(RENDERCHECKGLLIB)的影响,我们把这个库提前即可。

--- common.orig.mk      2012-01-27 14:34:13.129127766 +0900
+++ common.mk   2012-01-27 14:24:10.433129269 +0900
@@ -267,18 +267,18 @@
 
 # If dynamically linking to CUDA and CUDART, we exclude the libraries from the LIB
 ifeq ($(USECUDADYNLIB),1)
-     LIB += ${OPENGLLIB} $(PARAMGLLIB) $(RENDERCHECKGLLIB) ${LIB} -ldl -rdynamic 
+     LIB += $(RENDERCHECKGLLIB) ${OPENGLLIB} $(PARAMGLLIB) ${LIB} -ldl -rdynamic 
 else
 # static linking, we will statically link against CUDA and CUDART
   ifeq ($(USEDRVAPI),1)
-     LIB += -lcuda   ${OPENGLLIB} $(PARAMGLLIB) $(RENDERCHECKGLLIB) ${LIB} 
+     LIB += -lcuda   $(RENDERCHECKGLLIB) ${OPENGLLIB} $(PARAMGLLIB) ${LIB} 
   else
      ifeq ($(emu),1) 
          LIB += -lcudartemu
      else 
          LIB += -lcudart
      endif
-     LIB += ${OPENGLLIB} $(PARAMGLLIB) $(RENDERCHECKGLLIB) ${LIB}
+     LIB += $(RENDERCHECKGLLIB) ${OPENGLLIB} $(PARAMGLLIB) ${LIB}
   endif
 endif

其他编译所需依赖的安装

必须依赖安装包

sudo apt-get install g++ freeglut3-dev libxi-dev libxmu-dev

如果你还想用mpi,可以安装openmpi的包

sudo apt-get install openmpi-bin openmpi-dev

编译和测试sdk

cd ~/NVIDIA_GPU_Computing_SDK/C
make

测试

cd ~/NVIDIA_GPU_Computing_SDK/C/bin/linux/release
./nbody

 

P。S。

没看动说的啥,先放这里把。

由于64位系统的原因,如果编译的时候出现错误 “/usr/bin/ld: cannot find -lcutil”,你可以尝试创建链接来修正它 。

cd ~/NVIDIA_GPU_Computing_SDK/C/lib
for i in *_x86_64.a; do ln -sv $i ${i%_x86_64.a}.a; done

 

 

OpenFOAM 1.7.x 的ubuntu 依赖

sudo apt-get install binutils-dev flex bison git-core build-essential python-dev \
libreadline5-dev wget zlib1g-dev cmake libpng12-dev libxt-dev libxi-dev \
libxrender-dev libxrandr-dev libxcursor-dev libxinerama-dev libfreetype6-dev \
libfontconfig1-dev libglib2.0-dev freeglut3-dev libqt4-dev qt4-dev-tools libstdc++5

 

PGP keyservers:

 哎,费了老大劲,ubuntu的keyserver(keyserver.ubuntu.com)怎么也连不上,搜索了好几,终于找到了。原来,有这么多的PGP key server。

 来源网址:http://www.pramberger.at/peter/services/keyserver/network/

 

修改Ubuntu本地编码,让你的播放器正常显示标题

Ubuntu默认安装的环境为zh_CN.utf8或者en_US.utf8,然而很多windows的文档还是以GB2312或GBK编码保存的,当你打开Window文件的时候,总是有各种问题,出现各种诡异的乱码。因此十分有必要在Ubuntu下生成GBK或GB2312的locale。并设置默认本地编码:

1.  修改/var/lib/locales/supported.d/local文件,在文件中添加如下代码:

    zh_CN.GBK GBK

    en_US.GBK GBK

    zh_CN.GB2312 GB2312

    en_US.GB2312 GB2312

 

2.  sudo dpkg-reconfigure --force locales

          然后在输出的结果中会出现

          zh_CN.GB2312 done

          zh_CN.GBK done

    en_US.GBK done

    en_US.GB2312 done

3. 修改默认配置文件 /etc/default/locale

         修改默认LANG="en_US.UTF8"为

         LANG="en_US.GBK"

        或者

        LANG="zh_CN.GBK"

4.   重启Gmone

 

sudo /etc/init.d/gdm restart
# 如果没启动那么 Ctrl+Alt+F1 登录进入命令行模式
sudo /etc/init.d/gdm start

 

 

我的OpenFOAM第一步

基本上按照OpenFOAM的指导进行安装,但Ubuntu默认没有这几个库,得先手动装一下。

 

sudo apt-get install flex
sudo apt-get install binutils-dev

其他的还On the Way

还有就是确认你的ThirthParty目录里面有Gcc。没有的话,找一个方里面。我就是在OpenFOAM官方down的一个Bin包。

 

 

修改pam_mysql的源代码,让他支持ipv6.

      配置了vsftp+pam_mysql+mysql的虚拟用户管理系统。但学校的ipv6网络,人家用ipv6访问的时候不能准确记录其ip地址。遂down了pam_mysql的源代码,改之。基于尽量少的改动原有文件的原则。添加了部分代码。现在ok了。下面给大家说说具体修改过程。

1.    当然是下载源代码了。

           在你能有写权限的目录,比如 /home/you/ 建立工作目录如:mysql-pam  并进入

mkdir pam-mysql
cd pam-mysql
apt-get source libpam-mysql

将会得到以下文件

ado@www:~/mysql-pam$ ls
pam-mysql-0.6.2            pam-mysql_0.6.2-1.dsc
pam-mysql_0.6.2-1.diff.gz  pam-mysql_0.6.2.orig.tar.gz
 

 2.    修改pam_mysql.c

ado@www:~/mysql-pam$ cd pam-mysql-0.6.2/
ado@www:~/mysql-pam/pam-mysql-0.6.2$ vim pam_mysql.c
 

 

第1753行,原文件为:

        if (NULL == (remote_host = xcalloc(16, sizeof(char)))) {
                syslog(LOG_AUTHPRIV | LOG_CRIT, PAM_MYSQL_LOG_PREFIX "allocation failure at " __FILE__ ":%d", __LINE__);
                return PAM_MYSQL_ERR_ALLOC;
        }
 

修改为:

        if (NULL == (remote_host = xcalloc(255, sizeof(char)))) {
                syslog(LOG_AUTHPRIV | LOG_CRIT, PAM_MYSQL_LOG_PREFIX "allocation failure at " __FILE__ ":%d", __LINE__);
                return PAM_MYSQL_ERR_ALLOC;
        }
 

 

给remote_host变量足够的存储空间。

 

从1752行开始田间如下能容:

                sprintf(remote_host,"%s","unknown");
                struct sockaddr_in6 client_address;
                int salen6=sizeof(client_address);
                 if (!getpeername(0, (struct sockaddr *) &client_address, &salen6))
                {
                        char inet[64]="no ip is 2001:0da8:a800:0000:0000:0000:0000:0000 has nothing to do";
                        inet_ntop(AF_INET6,&(client_address.sin6_addr),inet,strlen(inet));
                        sprintf(remote_host,"%s",inet);
                }
                //strcpy(remote_host, "(unknown)");注释掉原来的操作
               //下面的代码不变

3. 好了,重新编译吧

./configure  !如果提示找不到什么“mysql_config”就安装这个包"libmysqlclient15-dev"

make

sudo make install

# 默认会安装到 /usr/lib/security/里面。
# 建个软连接

ln -s /usr/lib/security/pam_mysql.so /lib/security/pam_mysql.so

 

Ubuntu 配置 vsftp+mysql

1、安装vsftpd

sudo apt-get install vsftpd

 2、安装pam的mysql验证模块"pam_mysql.so"

sudo apt-get install libpam-mysql

3、配置vsftpd的PAM验证文件

vim /etc/pam.d/vsftpd

   Here is an example,注释掉原有的,添加最下面两行 

# Standard behaviour for ftpd(8).
# auth  required        pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed

# Note: vsftpd handles anonymous logins on its own.  Do not enable
# pam_ftp.so.

# Standard blurb.
#@include common-session

#@include common-auth
#auth   required        pam_shells.so

auth required pam_mysql.so user=yoursqluser passwd= host=localhost db=vsftpd table=user usercolumn=name passwdcolumn=passwd crypt=0 sqllog=1 logtable=log logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logtimecolumn=time verbose=1
account required pam_mysql.so user=yoursqluser  passwd=p@ssw0rd  host=localhost db=vsftpd table=user  usercolumn=name passwdcolumn=passwd crypt=0 sqllog=1 logtable=log logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logtimecolumn=time verbose=1
p@ssw0rd

#红色部分请根据自己的实际情况修改

4、修改vsftpd的配置文件

vim vim /etc/vsftpd.conf

Here is an example,开启了ipv6的监听。 

#去掉了所有的注释行
# listen=YES 这里注释掉是因为此项与listen_ipv6只能选一项,开启ipv6后自动侦听ipv4
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
guest_enable=YES
guest_username=ftp
anon_world_readable_only=NO
virtual_use_local_privs=YES
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
 

 5、确定你对ftp目录的写权限

sudo chown -R ftp\: /home/ftp/

6、最后重启vsftpd服务,看看服务器好没好用?

sudo /etc/init.d/vsftpd restart

好了,可以看看你的服务器是不是好了?

root@www:/home# ftp localhost
Connected to localhost.
220 (vsFTPd 2.0.7)
Name (localhost:ado): admin
331 Please specify the password.
Password:       //这里输入密码但看不见
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-r--r--    1 109      1001           76 May 07 02:07 2.txt
drwxr-xr-x    2 109      1001         4096 May 07 01:10 a directory
-rwxr-xr-x    1 109      1001         1482 May 07 02:07 bridge
drwxr-xr-x    3 109      1001         4096 May 07 02:07 icc32
-rwx------    1 109      1001     78771302 May 07 02:08 l_fc_p_10.1.015.tar.gz
-rw-r--r--    1 109      1001          323 May 07 01:36 ls.txt
226 Directory send OK.
ftp> mkdir test
257 "/test" created
ftp> rm test
250 Remove directory operation successful.
ftp>exit
root@www:/home#

 

 P.S.

   mysql 数据库的建立

#创建管理vsftpd用户的数据库和表,并插入测试帐号
#mysql -u root -p123456
CREATE DATABASE ftp;
USE ftp;
CREATE TABLE user(name CHAR(20) BINARY,passwd CHAR(20) BINARY);
INSERT INTO user (name,passwd) VALUES ('test1','12345');
INSERT INTO user (name,passwd) VALUES ('test2','54321');
GRANT SELECT on ftp.user to ftp@localhost identified BY '123456';
flush PRIVILEGES;
quit
 

 配置过程参考:菜鸟ubuntu8.04桌面版配置vsftp+mysql+pam 无法使用Ubuntu 8.04 Desktop上的vsftp+mysql+pam_mysql

 

Ubuntu 中管理服务

添加一个服务

sudo update-rc.d 服务名 defaults 99
 

 

删除一个服务

sudo update-rc.d 服务名 remove

 

临时重启一个服务

/etc/init.d/服务名 restart

 

临时关闭一个服务

/etc/init.d/服务名 stop

 

临时启动一个服务

/etc/init.d/服务名 start

Ubuntu也提供了另外一个简单的命令来实现管理。但首先服务必须已在/etc/init.d目录中存在。如:

添加一个服务: sudo update-rc.d ServiceName defaults

删除一个服务: sudo update-rc.d ServiceName remove

还可以安装另外一个比较强的工具: sudo apt-get install sysv-rc-conf sysvconfig

启动: sudo sysv-rc-conf 它可心配置各服务在各级别上的启动情况.

随时想启动某个服务, 可以这样: sudo /etc/init.d/ServiceName start

比如我要远程登录, 要用ssh服务: sudo /etcinit.d/ssh start (别的系统可能是sshd)

使用工具 sysv-rc-conf
  sudo apt-get install sysv-rc-conf
  sudo sysv-rc-conf
  用空格键开启或关闭,标记X的为开启,设置完按q退出

  下面简单介绍一下这几种运行等级:

  runlevel 1:为单用户模式保留,对应/etc/rc1.d目录中的脚本。该运行等级通常在恢复系统时使用。
  runlevel 2~5:应用于多用户模式,对应 /etc/rc2.d …… /etc/rc5.d目录中的脚本,通常可以自由定制。
  runlevel 0:关机进程,对应 /etc/rc0.d
  runlevel 6:重启进程,对应 /etc/rc6.d
  runlevel S:开机进程中最先的运行等级,对应 /etc/rcS.d中的脚本
 




Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee