分类目录归档:Linux

Linux下PPTPD VPN安装使用

Linux下常用的VPN服务有两个,一个是pptp,另一个则是openvpn。pptp更简单一些,但是只有独立服务器和XEN VPS可以搭建;openvpn则没有任何限制。pptp搭建出来的VPN,不需要特殊的VPN客户端,直接在Windows下创建VPN拨号连接即可;而openvpn需要安装一个客户端来进行拨号。

一共有5个软件包。这个pptp vpn解决方案,地址:http://poptop.sourceforge.net/yum/stable/packages/,这里能下载到你想要的所有东西。

1 首先安装一个叫dkms的软件包:

wget http://poptop.sourceforge.net/yum/stable/packages/dkms-2.0.17.5-1.noarch.rpm
然后:[有一个警告提示,忽略]
rpm -ivh dkms-2.0.17.5-1.noarch.rpm

2 然后安装所谓的MPPE

wget http://poptop.sourceforge.net/yum/stable/packages/kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm
rpm -ivh kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm

使用rpm -qa kernel_ppp_mppe查看 显示kernel_ppp_mppe-1.0.2-3dkms 确保已经正确安装了。

3 然后是安装PPP, ppp在yum源中,可以使用:
yum install ppp 安装,如果已经安装则会被忽略。
如果yum无法安装PPP,可以使用RPM方式安装:

wget http://poptop.sourceforge.net/yum/stable/packages/ppp-2.4.4-9.0.rhel5.i386.rpm
rpm -Uvh ppp-2.4.4-9.0.rhel5.i386.rpm

4 安装iptables
一般iptables都是默认有安装的,如果iptables没有安装可以使用 yum install iptables安装,否则需要下载rpm包安装。

5 PPTPD安装:

wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.rhel5.i386.rpm
rpm -ivh pptpd-1.3.4-2.rhel5.i386.rpm

[CentOS6 64位版本:poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.el6.x86_64.rpm]
以上两个RPM包的安装,必须要注意的是操作系统的位数,以上是32为的软件包安装,如果是64位的,必须使用64位的软件包。[可以参看软件包列表,查看操作系统位数可以使用getconf LONG_BIT]

这样,软件包安装就完毕了。接下来是配置:
配置pptp。要编辑/etc/pptpd.conf文件:
vi /etc/pptpd.conf
找到“locapip”和“remoteip”这两个配置项,将注释符去掉,更改为你期望的IP段值。localip表示服务器的IP,remoteip表示分配给客户端的IP地址,可以设置为区间。以下是pptp默认的配置:

localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245

localip就是只服务器的IP地址,对于一台VPS,IP地址一定不是192.168.0.1,所以这里改为你机器的IP地址。remoteip是vpn接入后分配给客户机的ip地址。

接下来再编辑/etc/ppp/options.pptpd文件,为VPN添加Google DNS:

vi /etc/ppp/options.pptpd
#在末尾添加下面两行:
ms-dns 8.8.8.8
ms-dns 8.8.4.4

设置pptp VPN账号密码。需要编辑/etc/ppp/chap-secrets这个文件:
vi /etc/ppp/chap-secrets
在这个文件里面,按照“用户名 pptpd 密码 *”的形式编写,一行一个账号和密码。

修改内核设置,使其支持转发。编辑/etc/sysctl.conf文件:
vi /etc/sysctl.conf
将“net.ipv4.ip_forward”改为1,变成下面的形式:net.ipv4.ip_forward=1
保存退出,并执行下面的命令来生效它:sysctl -p

添加iptables NAT规则
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
这里的192.168.0.0/24是只一个网络,这个网络就是客户端IP地址所在的网络,把这个网络的数据转发给eth0接口,然后输入下面的指令让iptables保存我们刚才的转发规则,以便重启系统后不需要再次添加:

/etc/init.d/iptables save

重启iptables:

/etc/init.d/iptables restart

重启pptp服务。输入下面的指令重启pptp:

/etc/init.d/pptpd restart

设置开机自动运行服务:
最后一步是将pptp和iptables设置为开机自动运行,这样就不需要每次重启服务器后手动启动服务了

chkconfig pptpd on
chkconfig iptables on

插曲:
在CentOS6.x上安装时,通过yum安装了ppp,然后rpm安装了pptpd-1.3.4-2.rhel5.i386.rpm,最后发现pptpd起不来,最后安装了对应的pptpd-1.3.4-2.el6.i686.rpm解决(注意el6,yum安装ppp时安装了ppp-2.4.5-5.el6.i686)

如果服务器还启用了过滤规则,可能还需要添加如下规则,否则会导致连接不上:

-A INPUT -p gre -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 47 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1723 -j ACCEPT

在Windows7下安装Linux(CentOS 6.x)

在Linux下,貌似无法识别NTFS,但可以识别FAT32,但是FAT32有个致命问题,就是单个文件无法大于4G,然而下载的CentOS 6.5 DVD1大于4G,所以这个方法不做考虑。

反过来思考,可以分一个EXT3分区,然后把其挂在Windows7下,这个是可行的,所以本文使用这个方法。

我的电脑C盘是一个SSD硬盘,只分一个区,这里把C盘压榨6G出来,用来安装CentOS到机械硬盘的空闲地方。这里使用一个叫分区助手的工具完成这个操作(直接360安装卫士的软件中搜索可下载):

先拆分分区,然后接着格式化(具体过程略)。
格式化分区

然后寻找一个叫ext2fsd的软件,用它可以把Ext3挂在到Windows里(http://www.ext2fsd.com)
EXT分区挂载到Windows

这里把这个EXT3分区映射为Windows下的X盘,接下就是拷贝文件进去:

CentOS-6.5-x86_64-bin-DVD1.iso
CentOS-6.5-x86_64-bin-DVD2.iso
images
isolinux

isolinux 和 images是从CentOS-6.5-x86_64-bin-DVD1.iso文件中提取出来的。

接下来就是要从这个EXT3分区引导安装,这个时候还需要一个叫EasyBCD的工具:
Windows下添加引导
这里配置一个启动项,这个配置项是需要正确指定刚刚配置的EXT3的对应编号,比如hd0表示第一个硬盘,后面的1表示这个硬盘的第二分区。
引导Linux分区启动
重新启动后就可以看到这个启动项,选择进入开始引导,选择镜像位置后就和用光盘安装没有什么区别了,所以后面的过程就省略了。安装完成后这个EXT3分区可以删掉,也可以挂到Linux中,使用它在Linux和Windows中共享文件。

原创文章,装载务必保留出处。
永久链接: http://blog.ifeeline.com/1090.html

CentOS 6.X下添加新硬盘

在虚拟机下操作练习。添加一张新硬盘,然后启动系统。

#fdisk命令参数介绍
#     p、打印分区表。
#     n、新建一个新分区。
#     d、删除一个分区。
#     m、输出菜单
#     q、退出不保存。
#     w、把分区写进分区表,保存并退出。

#查看分区情况,应看到新添加的磁盘为sdb,未分区
fdisk -l 	
#然后开始分区,这里就分一个区
fdisk /dev/sdb
#建立分区,用p表示建立主分区,然后用n建立分区(指定开始与结束柱面)
fdisk /dev/sdb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help):
#最后用w保存分区表信息

#再次查看分区信息
fdisk –l
.....
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x64627767

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1305    10482381   83  Linux

#接下来需要格式化
mkfs –t ext4 –c /dev/sdb1

#然后把其进行挂载
mount –t ext4 –o rw /www

这样就完成了新硬盘添加和分区格式化。

为了让其能开机自动加载,还需要编辑/etc/fstab实现自动挂载

UUID=144e7ab9-0a81-4139-9ca7-9e69435d6ec9	/	ext4 	noatime,nodiratime 	1 1
UUID=817c334e-721c-4296-9e8b-e588bac87d87	/boot	ext4    	defaults        		1 2
UUID=d77cd91c-8ec8-44af-a5c7-e9052371b46e 	swap	swap    defaults        		0 0

第一列是设备名称,第二列是挂载点,第三列是挂载的文件系统,第四轮是挂载选项(比如可以是rw),第五列表示分区是否备份(像swap分区是不需要备份的),第六列表示分区是否校验(根分区一般是1,其它一般是2)。这里显示的分区是使用UUID来指定的,实际也可以直接指定分区名称,比如/dev/sab1等。不过,如果知道分区对应的UUID呢?

#列出当前系统中所有已挂载文件系统的UUID
blkid -s UUID              #build id->blkid
#查看UUID
ls -l /dev/disk/by-uuid
lrwxrwxrwx 1 root root 10 Jun 19 23:31 144e7ab9-0a81-4139-9ca7-9e69435d6ec9 -> ../../sda2
lrwxrwxrwx 1 root root 10 Jun 19 23:31 817c334e-721c-4296-9e8b-e588bac87d87 -> ../../sda1
lrwxrwxrwx 1 root root 10 Jun 19 23:31 e70fa1c3-2542-49cd-adaf-7364fb263218 -> ../../sdb1

从这个结果可以看到,实际UUID就是一个实际分区的链接文件。

总结一下操作硬盘:

fdisk -l		显示硬盘和分区信息
fdisk /dev/sd*		管理硬盘,比如添加删除分区等
mkfs –t 类型 分区	格式化分区
df –h			查看已经挂载的文件系统
/etc/fstab		自动挂载设置文件

原创文章,转载务必保留出处。
永久链接: http://blog.ifeeline.com/1088.html

GDB在调试程序时候提示Missing separate debuginfos, use: debuginfo-install glibc…

使用GDB调试C程序时:

gdb sum
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-60.el6_4.1)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /root/the_c/sum...done.
(gdb) run
Starting program: /root/the_c/sum 
The sum of 1+2+3+...is 4950
Program exited with code 033.
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.132.el6_5.1.x86_64

提示使用debuginfo-install安装glibc。
在shell下运行:

debuginfo-install glibc-2.12-1.132.el6_5.1.x86_64
-bash: debuginfo-install: command not found

提示debuginfo-install命令不存在,那么必须还要安装个软件包。实际debuginfo-install是yum-utils软件包的一个工具,所以:

yum install yum-utils
...
rpm -ql yum-utils | grep debuginfo-install
/usr/bin/debuginfo-install
/usr/share/man/man1/debuginfo-install.1.gz

然后再次运行:

debuginfo-install glibc-2.12-1.132.el6_5.1.x86_64

Dependencies Resolved

===================================================================================
 Package                             Arch     Version              Repository
                                                                              Size
===================================================================================
Installing:
 glibc-debuginfo                     x86_64   2.12-1.132.el6_5.1   debug     8.7 M
 nss-softokn-debuginfo               x86_64   3.14.3-9.el6         debug     1.7 M
 yum-plugin-auto-update-debug-info   noarch   1.1.30-17.el6_5      updates    22 k
Installing for dependencies:
 glibc-debuginfo-common              x86_64   2.12-1.132.el6_5.1   debug     8.3 M

至此,问题解决。

原创文章,转载务必保留出处。
永久链接:http://blog.ifeeline.com/1079.html

Linux 作业管理(job control)

当登录系统取得bash shell之后,在单一终端机下同时进行多个作业的行为管理。

在进行作业管理的行为中,其实每个作业都是目前bash的子进程,即彼此之间是有相关性的。登录一个终端出现提示符让你操作的环境成为前台 (foreground),至于其它作业就可以放入后台(background)去暂停或运行。注意:放入后台的作业必须不能与用户互动。

Bash的作业控制必须要注意到的限制是:
这些作业所触发的进程必须来自于你shell的子进程
前台:你可以控制于执行命令的这个环境成为前台的作业
后台:可以自行运行的作业,你无法使用[ctrl+c]终止它,可使用bg/fg调用该作业
后台中执行的进程不能等待terminal/shell的输入

1 Job control管理 [作业管理]
Bash下面的Job分前台与后台,然后再后台里面的作业状态又可分为暂停与运行中。

直接将命令丢到后台中执行的&
例子:

tar –zpcf /tmp/etc/targ.gz /etc &

后面加入上&表示在后台处理,回车后看到bash会给予这个命令一个作业号码(job number),就是那个[1]。但是这个标准输出和错误输出还是都屏幕上。所以应该使用重定向处理。

tar –zpcf /tmp/etc.tar.gz /etc/ > /tmp/log.txt 2>&1 &

将目前的作业丢到后台中暂停:ctrl-z
比如正在使用vi,却发现有个文件不知道放在哪里,需要到bash环境下进行查找,此时只要将vi丢到后台当中等待即可。
例子:

vi ~/.bashrc
# 在vi的一般模式下,按下[ctrl]-z这两个键
[1]+ Stopped
# 顺利取得前台控制权

按下[ctrl]-z这两个键,屏幕上出现[1],表示这是第一个作业,而那个+代表最近一个被丢进后台的作业,且目前在后台下默认会被取用的那个作业(与fg这个命令有关)。而那个stopped则代表目前这个作业的状态。默认,使用[ctrl-z]丢到后台当中的作业都是暂停状态。

查看目前的后台作业状态:jobs
用法:

jobs [-lrs]
参数:
-l 除了列出job number与命令串之外,同时列出PID的号码
-r 仅列出正在后台run的作业
-s 仅列出正在后台当中暂停(stop)的作业

一般,直接执行jobs即可。如果还想知道该Job number的PID号码,可以加上-l这个参数。在输出的信息中,那个+代表默认的取用作业。如果目前有两个作业在后台当中,两个作业都是暂停的,而如果仅输入fg时,那么那个标志了+的作业会被拿到前台当中来处理。其实+代表最近被放到后台的作业号码,-代表最近第二个被放置到后台当中的作业号码。而超过最后第三个以后的作业,就不会有+/-符号存在了。

将后台作业拿到前台来处理:fg

fg %jobnumber
参数:
%jobnumber: jobnumber为作业号码(数字)。注意:%可有可无
如果fg –则把标志了-的那个作业拿出来。


让作业在后台下的状态变成运行中:bg

由于按下ctrl-z后作业会放到后台停止,如果要让其继续在后台运行起来,需要使用bg,它和fg的用法一样。

管理后台当中的作业:kill
如果需要删除某个作业,需要使用kill。

用法:
kill –signal %jobnumber
参数:
-l 列出目前能够使用的信号(signal)有哪些
signal 代表给予后面接的那个作业什么样的指示。
-1 重新读取一次参数的配置文件
-2 代表与由键盘输入ctrl-c同样的操作
-9 立刻强制删除一个作业
-15 以正常的程序方式终止一项作业

注意:-9通常是在强制删除一个不正常的作业时所使用的,-15则是以正常步骤接受一项作业(15也是默认值)
另外,kill后面接的数字默认是PID,如果想要管理bash的作业控制,就得要加上%数字了。

永久链接:http://blog.ifeeline.com/1052.html

Linux 终端登录

[root@vfeelit ~]# pstree -an
init
  ├─sshd
  │   ├─sshd 
  │   │   └─bash
  │   └─sshd 
  │       └─bash
  │           └─pstree -an
  ├─login     
  │   └─bash
  ├─mingetty /dev/tty2
  ├─mingetty /dev/tty3
  ├─mingetty /dev/tty4
  ├─mingetty /dev/tty5
  └─mingetty /dev/tty6

默认启动了6个终端(tty)等待用户登录。6个终端命名分别是tty1-tty6,系统开机后默认进入tty1等待用户登录。可以通过使用ALT+F1-F6切换到不同的终端。登录后如果使用pstree查看可知对应的终端“名称”为login并在其下产生了一个bash子进程。实际这个login名称可以看做是对应tty的别名。

和由终端进入bash环境不同,如果通过sshd进入bash的话,首先由主sshd派生一个子进程,然后在这个子进程下再产生bash子进程。实际上,有主sshd派生的子sshd进程,它们是用pts/0-pts/n来做别名的。

永久链接: http://blog.ifeeline.com/1050.html