Jul 5, 2013
Technology刚安装好的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
Jul 5, 2013
TechnologyLinux忘记密码后,可以通过修改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系统即可。
Jul 5, 2013
Technology1. 启动完毕后客户机无法得到网络地址:
故事的小插曲:由于虚拟机是“偷”跑在某台服务器上,不便在系统路径里留下痕迹,只能使用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.
Jul 4, 2013
Technology1. 从源码安装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
Jul 3, 2013
Technology1. 自动编号的问题:
Markdown里的自动编号只适用于块(block)中的自动编号,也就是说,在使用了例如Solarized格式化代码块以后,全局中的自动编号不再起作用。
正常的自动编号, 不会有问题, 前标号分别为1/2/3:
1. item 1
2. item 2
3. item 3
加入代码块后的情形:
item 1/item 2/item 3都将以1. item开头, 前标号变成1/1/1:
1. item 1
// code blocks
2. item 2
// code blocks
3. item 3
解决方法:使用Markdown转义字符, 在.前加\
1\. item 1
2\. item 2
3\. item 3
2. Solarized高亮代码的两种用法:
把代码放在如下块中:
{% raw %}
//Your code here!
或者
```
//Your code here!
```
{% endraw %}
代码高亮方法
a. 指定codeblock参数:
{% raw %}
#include <stdio.h> int main(void) { printf("Hello World!\n"); return 0; }
{% endraw %}
结果:
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}
b. 指定多行代码参数:
标题"Discover if a number is prime”, 链接地址"http://…", 链接名称"Source Article”.
{% raw %}
class Fixnum
def prime?
('1' * self) !~ /^1?$|^(11+?)\1+$/
end
end
{% endraw %}
class Fixnum
def prime?
('1' * self) !~ /^1?$|^(11+?)\1+$/
end
end
3. Syntax Highlight 在 ArchLinux 上的问题:
因为ArchLinux默认的python版本是3, 导致pygments不能正确解析源文件,编辑:
vim ~/.rvm/gems/ruby-1.9.3-p448/gems/pygments.rb-0.3.4/lib/pygments/mentos.py
第一行
/usr/bin/env python –> /usr/bin/env python2