ArchLinux上安装arm编译链

在X86_64的ArchLinux上安装Mentor Graphics提供的arm交叉编译链时出现下列问题:

	$ ./arm-2013.05-23-arm-none-eabi.bin 
	Checking for required programs: awk grep sed bzip2 gunzip
	===============================================================
	Error: Missing 32-bit libraries on 64-bit Linux host
	===============================================================
	Your 64-bit Linux host is missing the 32-bit libraries
	required to install and use Sourcery CodeBench.

解决方法:

编辑/etc/pacman.conf,去掉下列两行的注释

	[multilib]
	Include = /etc/pacman.d/mirrorlist

而后安装必要的ia32相关的包:

	$ pacman -Sy
	$ pacman -S lib32-glibc
	$ pacman -S lib32-gtk lib32-gtk2

安装好以后执行前面被中断的安装进程,这时候可以顺利安装了。

安装完毕后记得把交叉编译链的路径加入到系统路径中,最好在~/.bashrc里加上一笔:

	export PATH=$HOME/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_EABI/bin:$PATH
	export PATH=$HOME/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin:$PATH

ArchLinux的yaourt仓库里也有arm-none-eabi和arm-none-linux-eabi等交叉编译链,但是每次编译都会出现莫名其妙的错误,使用现成的编译链能大大节省开发时间。

ArchLinux初步配置网络

刚安装好的ArchLinux上只有基本的系统组件,启动以后连ifconfig都没有(其实ifconfig早在N年前就被干掉,以ip命令代替了)。在这种一穷二白的情况下,如何配置好网络参数?下面的步骤可以让人一劳永逸。

1. 查看网络接口信息:

	$ ip link show
	1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT 
	    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
	2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
	    link/ether 08:00:27:09:fd:b7 brd ff:ff:ff:ff:ff:ff
可以看到enp0s3为有线端口,未启动,无地址无网关无路由。

2. 启动网口:

	$ ip link enp0s3 up

3. 配置网卡地址:

	$ ip addr add 192.168.1.133/24 broadcast 192.168.1.255 dev enp0s3

参数解释:IP地址: 192.168.1.133, 广播地址:192.168.1.255

4. 配置默认路由为192.168.1.1:

	$ ip default-gateway 192.168.1.1

5. 查看接口信息:

	#路由信息
	$ ip route show
	#地址信息
	$ ip addr show

6. 添加dns解析信息:

	$ vim /etc/resolv.conf

输入ISP提供的dns服务器信息,例如:

	nameserver 58.XXX.xx.xx
	nameserver 221.x.x.xx

7. 安装net-tools,这里包含了ifconfig,终于可以不用忍受ip命令的折磨了。但是我记得看过一个高手的文章,他建议使用ip而不是使用陈旧的功能有限的ifconfig,高手开了个玩笑:“记住每次你敲ifconfig时,就会有一只无辜的小猫咪因为偷吃奶酪被击杀,可怜可怜小猫咪吧 :(”。虽然ifconfig很方便也是大多数教程里的常用配置,还是建议大家尽快适应繁琐的ip命令。

	$ pacman -S net-tools

8. 安装dhcpcd并加入到系统启动项中:

	$ pacman -S dhcpcd
	# 临时启动dhcpcd
	$ systemctl start dhcpcd@enp0s3
	# 将dhcpcd加入到启动项中
	$ systemctl enable dhcpcd@enp0s3

现在重启机器,就可以从dhcp服务器自动获取地址并配置dns服务器等信息了。

9. 其他:

删除当前已经绑定的IP地址:

	$ ip addr del 192.168.1.134/32 dev enp0s3

若机器处于有防火墙的机器中,则需要配置好proxy信息才能正常使用网络,在命令行下,输入一下命令:

	$ export http_proxy=http://ip_address:ip_port
	$ export https_proxy=http://ip_address:ip_port
	$ export ftp_proxy=http://ip_address:ip_port
	$ export ftps_proxy=http://ip_address:ip_port

Linux忘记密码后使用grub重置密码

Linux忘记密码后,可以通过修改Grub启动参数来进行修复, 举Ubuntu13.04为例:

出现Grub菜单时,按"e"键或是其他键进入Grub的编辑方式。

menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-baec278e-2b9f-4513-a6f1-e148ac6295d7' {
recordfail
	load_video
	gfxmode $linux_gfx_mode
	insmod gzio
	insmod part_msdos
	insmod ext2
	set root='hd0,msdos2'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos2 --hint-efi=hd0,msdos2 --hint-baremetal=ahci0,msdos2  baec278e-2b9f-4513-a6f1-e148ac6295d7
	else
	  search --no-floppy --fs-uuid --set=root baec278e-2b9f-4513-a6f1-e148ac6295d7
	fi
	linux	/boot/vmlinuz-3.8.0-19-generic root=UUID=baec278e-2b9f-4513-a6f1-e148ac6295d7 ro   
	initrd	/boot/initrd.img-3.8.0-19-generic
}

改动下面这行

linux	/boot/vmlinuz-3.8.0-19-generic root=UUID=baec278e-2b9f-4513-a6f1-e148ac6295d7 ro   

linux	/boot/vmlinuz-3.8.0-19-generic root=UUID=baec278e-2b9f-4513-a6f1-e148ac6295d7 rw init=/bin/bash  

init=/bin/bash将把系统启动到一个没有root密码的shell, rw则允许修改密码,否则ro的情况下无法更新密码。

使用改动后的grub启动系统。在Grub2中一般是按F10, Grub中则是回车后按"b"键,具体需参考grub的帮助。

系统启动到shell后, 输入passwd username重设自己的密码后,reboot系统即可。

在CentOS上安装基于qemu的虚拟机(2)

1. 启动完毕后客户机无法得到网络地址:

故事的小插曲:由于虚拟机是“偷”跑在某台服务器上,不便在系统路径里留下痕迹,只能使用CPU/内存资源,采取了挂载NFS文件系统的方法,Qemu和vde均自行编译,先于vde编译的Qemu在配置的时候未能激活vde选项,造成客户机中无法找到vde配置的网络。

现象:重新编译qemu,使用下列命令时报错:

./configure --prefix=Your_place_here --target-list="i386-softmmu \
x86_64-softmmu  i386-linux-user x86_64-linux-user" --enable-kvm \
--enable-user --enable-vde

安装vde2到系统路径后重编译qemu成功。而后

$ export LD_LIBRARY_PATH=/usr/lib:$LD_LIBRARY_PATH

则可正常启动vde/qemu

2. 开启Linux内核的forwarding, 这样客户机可以接入Internet.

echo 1>/proc/sys/net/ipv4/ip_forward 

3. 增加更多的核:

在启动参数中添加:

-cpu host -smp cores=2,threads=1 

To be continued.

在CentOS上安装基于qemu的虚拟机

1. 从源码安装qemu和vde(Virtual Distributed Ethernet) Qemu的安装过程比较标准,编译vde时则需要有些小改动:

$ svn co https://vde.svn.sourceforge.net/svnroot/vde/trunk/vde-2 vde_svn
$ cd vde_svn
$ autoreconf -fi
$ ./configure --enable-experimental --prefix=./Your_Destination
$ make
$ sudo make install

在编译vde时,需要安装python-devel包并创建一个空的"stropts.h"文件才能通过编译:

$ yum install python-devel
$ touch /usr/include/stropts.h

2. 创建虚拟网络, 并使用slirpvde建立默认的dhcpd服务器:

$ vde_switch -s /tmp/switch
$ slirpvde -s /tmp/switch --dhcp
Starting slirpvde: virtual_host=10.0.2.2/24
                   DNS         =10.0.2.3
                   dhcp_start  =10.0.2.15
                   vde switch  =/tmp/switch

3. 创建qemu镜像并开始使用cdrom镜像安装系统:

$ qemu-img create -f qcow2 Windows.qcow2 16G
Formatting 'Windows.qcow2', fmt=qcow2 size=17179869184 encryption=off cluster_size=65536 lazy_refcounts=off 

# 使用创建的镜像安装系统 
$ qemu-system-i386 -net nic,macaddr=52:54:00:00:EE:17 -net \
vde,vlan=0,sock=/tmp/switch -m 765 -enable-kvm  -cdrom \
/path_to_your_iso.iso  -boot d \
/path_to_your_image/Windows.qcow2 -vga std -vnc :7

4. 在本机上,可以使用vncviewer来查看安装情况:

$ vncviewer Your_server_ip:7

5. 安装完毕后,启动创建好的虚拟机:

$ qemu-system-i386 -net nic,macaddr=52:54:00:00:EE:17 -net \
vde,vlan=0,sock=/tmp/switch -m 765 -enable-kvm  \
-hda /path_to_your_image/Windows.qcow2 -vga std -vnc :7

6. 指定物理网卡:

model=? ,rtl8139可以被Windows自动驱动
qemu-system-i386 -net nic,model=rtl8139,macaddr=52:54:00:00:EE:17 -net vde,sock=/tmp/switch -m 765 -enable-kvm -hda ./virt/Windows/Windows.qcow2 -vga std -vnc :7