Build docker for OpenPOWER (ppc64le)

It’s a nightmare if you have a unsupported arch while building tools. I have tried to build docker for RHEL/CentOS, Ubuntu for ppc64le. It took me lots of time.

Fortunately, from 1.10, docker will support arch ppc64le officially. ppc64le will be the default arch for OpenPOWER system. As of now, docker code is still in reorg. So there might be some tricks while building docker for ppc64le. Follow below steps. You can get a preview docker 1.10.0-dev for your system. Let’s try it.

It is much simpler than before. Only two commands~

docker build -t docker -f Dockerfile.ppc64le .
docker run --privileged docker ./hack/make.sh gccg

Let’s check the running version.

./docker-1.10.0-dev version
Client:
 Version:      1.10.0-dev
 API version:  1.23
 Go version:   go1.4.2 gccgo (GCC) 5.3.0
 Git commit:   6f86bce-unsupported
 Built:        Sun Jan 31 16:11:15 2016
 OS/Arch:      linux/ppc64le

Server:
 Version:      1.10.0-dev
 API version:  1.23
 Go version:   go1.4.2 gccgo (GCC) 5.3.0
 Git commit:   6f86bce-unsupported
 Built:        Sun Jan 31 16:11:15 2016
 OS/Arch:      linux/ppc64le

为 CentOS 打上 EPEL 扩展源

最近想在 CentOS 上安装 wine,却发现在默认的 repo 里边没有。一番搜索后得知 CentOS 的源中没有 wine, 另辟蹊径的方法是安装 EPEL。那什么事 EPEL 呢,官方的答案是 Extra Packages for Enterprise Linux,也就是为企业级 Linux 提供的额外软件源,兼容 RHEL,CentOS,Scientific Linux。

安装方法如下:

For EL5 32位:

su -c ‘rpm -Uvh http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm’

su -c ‘yum install foo’

Continue reading

gcc: error: elf_i386/elf_x86_64: No such file or directory

最近碰到个 PM 连接的硬盘在 Fedora 15 (FC15)中无法识别的问题,但是在 Fedora 13 中却是可以侦测到的。对比 fc13 使用的是 2.6.34,fc15 则是 2.6.40(3.0.4)。决定逐一将 kernel 降级来判断到底是从那一版的 kernel 开始出现这个问题的。那在使用 fc15 的 gcc 编译 2.6.36.2 以下 kernel 时,一直报错。

错误提示:

gcc: error: elf_x86_64: No such file or directory

解决方法:

这个问题是由于 gcc 4.6 不再支持 linker-style 架构。讲 arch/x86/vdso/Makefile 中,

将以 VDSO_LDFLAGS_vdso.lds 开头所在行的 "-m elf_x86_64" 替换为 "-m64"。
将以 VDSO_LDFLAGS_vdso32.lds 开头所在行的 "-m elf_x86" 替换为 "-m32"。

可以解决这个问题。

 

参考链接:https://bbs.archlinux.org/viewtopic.php?id=119341

【转】Linux Kernel 内核编译安装

一、获取内核源码文件。

从http://www.kernel.org下载内核源码包(linux-2.6.26.tar.gz)。

# cp linux-2.6.26.tar.gz /usr/src
# tar -xvzf linux-2.6.26.tar.gz
# ln -s linux-2.6.26  linux-2.6

二、配置内核。

1. 进入内核文件所在目录。
    # cd /usr/src/linux-2.6

2. 编辑 /usr/src/linux-2.6/Makefile 文件的EXTRAVERSION的值。
    EXTRAVERSION = No_Power_Management_Support   # 以此标识内核

3. 运行命令make mrproper,以确保源文件处于一致、干净的状态。这个命令会删除内核配置文件.config(如果有的话)。

4. 保存默认的配置文件(/usr/src/linux-2.6/arch/x86/i386_defconfig)到安全位置,比如软盘,以便必要时恢复默认配置。

5. 使用配置工具设置内核选项。

#make config(基于文本的最为传统的配置界面,由于有几百个问题要回答,一般使用其它的配置工具。)
#make menuconfig(基于文本选单的配置界面)
#make xconfig(基于图形窗口模式的配置界面)
#make oldconfig(使用已有的内核配置文件,仅提示一些新的特性。)

选择相应的配置时,有三种选择:  

 “Y”- 将该功能编译进内核
 “N”- 不将该功能编译进内核
 “M”- 将该功能编译成可以在需要时动态插入到内核中的模块。

参考:Linux 2.6.19.x 内核编译配置选项简介

设置完选项后,保存更改。上述配置工具会生成配置文件 /usr/src/linux-2.6.26/.config

如果要使用现有的配置文件(比如默认的配置文件),首先将该配置文件拷贝为/usr/src/linux-2.6/.config,然后执行命令    make oldconfig

三、编译内核。

1.make clean
   清除前面过程中make后遗留下的文件。

2.make dep
   读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译而那些不需要。2.6内核不需要执行此步骤。

3.make zImage
   make bzImage

   这两个命令会在/usr/src/linux-2.6下创建文件vmlinux,这是未压缩的内核。

   make zImage 和 make bzImage 会各自在/usr/src/linux/arch/i386/boot/下创建文件zImage和bzImage,这是已经压缩的内核。zImage是用gzip压缩的,适合存储在软盘上的内核。bzImage是更大的超过软盘空间限制的压缩内核。

4.make modules   编译生成相应的模块。

5.make modules_install
   一旦模块被编译,它们须被拷贝到相应的子目录/lib/modules下,make modules_install 命令执行这一任务。
   模块在系统中的标准目录位于/lib/modules/x.y.z,后面的x.y.z是版本号,为安全起见,在运行make modules_install之前最好对/lib/modules进行备份。

6.make install 通过执行以下步骤完成安装。
  (1)把压缩内核映象拷贝到/boot目录下, 并创建相应的System.map符号链接; 
  (2)修改bootloader的配置文件;
  (3)调用mkinitrd程序创建内核的initrd映象. 对于GRUB而言, 将在/boot/grub/grub.conf配置文件增加如下类似的配置行:

  title Red Hat Linux (2.***)
  root(hd0, 1)
  kernel /boot/vmlinuz-2.*** ro root=LABEL=/
  initrd /boot/initrd-2.***.img

 

转自:http://wanghongwei.iteye.com/blog/232543

Linux 下使用 Crontab 命令实现定时操作重启(计划任务)

crond 服务是一个定时执行的服务,可以通过 crontab 命令添加或者编辑需要定时执行的任务:

  • crontab -u //设定某个用户的 crond 服务,一般 root 用户在执行这个命令的时候需要此参数
  • crontab -l //列出某个用户的 crond 服务的详细内容
  • crontab -r //删除没个用户的 crond 服务
  • crontab -e //编辑某个用户的 crond 服务

编辑中的内容格式:

#MIN HOUR DAY MONTH DAYOFWEEK COMMAND

 

比如:

  • #每天早上6点10分

        10 6 * * * date

  • #每两个小时

        0 */2 * * * date (solaris 5.8似乎不支持此种写法)

  • #晚上11点到早上8点之间每两个小时,早上8点

        0 23-7/2,8 * * * date

  • #每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

        0 11 4 * mon-wed date

  • #1月份日早上4点

        0 4 1 jan * date

【笔记】Bash Shell 下算术运算的方法

以下摘自 www.tnc.edu.tw,by 臥龍小三。原文

 

Bash shell 的算術運算有四種方式。

  1. 第一種:使用 expr 這個外部程式

    加法 r=`expr 4 + 5`

    echo $r

    注意! '4' '+' '5' 這三者之間要有空白

    注意! 以下是錯誤的寫法:

    r=`expr 4 * 5`

    原因:* 對 bash 而言有特殊意義(萬用字元),所以要改用以下寫法:

    乘法 r=`expr 4 \* 5`

    也就是說用 \ 取消 * 的特殊意義。

  2. 第二種:使用 $(( ))

    上述計算,可用以下方式來做:

    r=$(( 4 + 5 ))

    echo $r

  3. 第三種:使用 $[ ]

    上述計算,可用以下方式來做:

    r=$[ 4 + 5 ]

    echo $r

  4. 乘法

    r=`expr 4 \* 5`

    r=$(( 4 * 5 ))

    r=$[ 4 * 5 ]

    echo $r

  5. 除法

    r=`expr 40 / 5`

    r=$(( 40 / 5 ))

    r=$[ 40 / 5 ]

    echo $r

  6. 減法

    r=`expr 40 – 5`

    r=$(( 40 – 5 ))

    r=$[ 40 – 5 ]

    echo $r

  7. 求餘數

    r=$[ 100 % 43 ]

    echo $r

  8. 乘冪 (如 2 的 3 次方)

    r=$(( 2 ** 3 ))

    r=$[ 2 ** 3 ]

    echo $r

    註:expr 沒有乘冪

Bash 的第四種算術運算方法,它使用 let 這個命令,如下所示:

加法:

n=10
let n=n+1
echo $n

結果為 11


乘法:

let m=n*10
echo $m

結果為 110


除法:

let r=m/10
echo $r


求餘數:

let r=m%7
echo $r


乘冪:

let r=m**2
echo $r

雖然 Bash shell 有數種算術運算方法,但並不是每一種方法都可以跨平台,若您的 script 檔要在其它平台上使用,建議最好用 expr 這種方式,或許可攜性會好一點。

另外,我們在 script 中經常需要把某一變數做加一運算,以下四法皆可:

m=$[ m + 1]

m=`expr $m + 1`

m=$(($m + 1))

let m=m+1

Linux 下如何分别打包(压缩)目录下所有文件夹,xargs,awk

这个问题可以通过一行命令完成(当然是通过管道 “|” 所包含多条命令啦)。首先需要拆分这个问题。

  • 获得所有目录列表,通过 grep 命令抓取以 d 标记开头的行,即为目录。
[edwin@edwinW /]# ls
Dropbox  bin  boot  data  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var  wwwroot
[edwin@edwinW /]# ls -l | grep ^d                   
drwxrwxrwx  6 nobody nobody  4096 Jul 19 05:00 Dropbox
drwxr-xr-x  2 root   root    4096 May 11 19:58 bin
drwxr-xr-x  2 root   root    4096 May 11 19:58 boot
drwxr-xr-x  3 mysql  mysql   4096 Apr 12 19:35 data
drwxr-xr-x 12 root   root   13420 Jul  5 21:45 dev
drwxr-xr-x 53 root   root    4096 Jul 12 20:38 etc
drwxr-xr-x  6 root   root    4096 May 11 19:58 home
drwxr-xr-x  9 root   root    4096 Jul  1 00:02 lib
drwxr-xr-x  7 root   root    4096 Jul  1 00:01 lib64
drwx------  2 root   root   16384 May 18  2010 lost+found
drwxr-xr-x  2 root   root    4096 May 11 19:58 media
drwxr-xr-x  3 root   root    4096 Jun 12 21:32 mnt
drwxr-xr-x  2 root   root    4096 May 11 19:58 opt
dr-xr-xr-x 96 root   root       0 Jul  5 21:45 proc
drwxr-x---  8 root   root    4096 Jul 12 20:07 root
drwxr-xr-x  2 root   root    4096 Jul  1 00:02 sbin
drwxr-xr-x  2 root   root    4096 May 11 19:58 selinux
drwxr-xr-x  2 root   root    4096 May 11 19:58 srv
drwxr-xr-x 13 root   root       0 Jul  5 21:45 sys
drwxrwxrwt  6 root   root   94208 Jul 19 23:39 tmp
drwxr-xr-x 15 root   root    4096 Jun 12 21:24 usr
drwxr-xr-x 18 root   root    4096 Jun 12 21:24 var
  • 这样只是 ls 了所有目录,接下来需要获得目录下所有文件夹名称,不需要多余信息。使用 awk 选取名称列。
[edwin@edwinW /]# ls -l | grep ^d | awk '{print $9}'
Dropbox
bin
boot
data
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
sbin
selinux
srv
sys
tmp
usr
var
  • 接下来最后一步是打包这些目录。使用 xargs 来实现。
[edwin@edwinW /]# ls -l | grep ^d | awk '{print $9}' | xargs -i tar jcvf {}.tbz {}

 

其实 Linux 下很多问题都可以这样一步一步分解成不同部分,用不同命令组合来完成,这就是 bash 脚本的精髓。

 

参考:

awk:http://linux.die.net/man/1/awkhttp://www.gnu.org/software/gawk/manual/gawk.html

xargs:http://unixhelp.ed.ac.uk/CGI/man-cgi?xargshttp://en.wikipedia.org/wiki/Xargs

cut:http://www.manpagez.com/man/1/cut/

grep:http://unixhelp.ed.ac.uk/CGI/man-cgi?grep

Linux 下流量查看监控软件 iftop 的安装

最近几天发现网站的流量消耗的非常厉害,考虑到 VPS 是有流量限制的,然后就想查看下当前的流量状况和网络连接状态。

iftop 官方网站:http://www.ex-parrot.com/~pdw/iftop/

安装 iftop,必须先安装 libpcap。libpcap 是 unix/linux 平台下的网络数据包捕获函数包,大多数网络监控软件都以它为基础。网站,http://www.tcpdump.org/release/

wget http://www.tcpdump.org/release/libpcap-0.9.8.tar.gz
tar -zxvf libpcap-0.9.8.tar.gz
cd libpcap-0.9.8
./configure
make
make install

libpcap 安装完成,再安装 iftop,

wget http://www.ex-parrot.com/~pdw/iftop/download/iftop-0.17.tar.gz
tar zxvf iftop-0.17.tar.gz
cd iftop-0.17
./configure
make
make install

Ubuntu Linux 下使用 sendmail 发带附件邮件

sendmail 发附件需要使用 uuencode 命令。它包含在 sharutils 组件中,安装方法:

Ubuntu: apt-get install sharutils
Fedora/CentOS: yum install sharutils

开启 sendmail 服务:

/etc/rc.d/init.d/sendmail start

安装 mail 命令:

apt-get install mailutils
或者
apt-get install mailx

现在就可以发送附件了

uuencode /root/tmp.tar tmp.tar | mail -s "tmp.tar" xxx@xxxx.com

发送时加上邮件内容:

uuencode /root/tmp.tar tmp.tar | mail -s "tmp.tar" xxx@xxxx.com <
>test...
>EOF

如此发送的话,邮件内容将会覆盖掉附件。