益友网(http://www.1uu2.com) 做linux用户的良师益友、linux操作系统命令教程

Linux系统上配置Nginx+Mongrel cluster

发表于 2010-03-11 01:39 浏览次数:704 次

Nginx不仅是一个小巧且高效的HTTP服务器,也可以做一个高效的负载均衡反向代理,通过它接受用户的请求并分发到多个Mongrel进程可以极大提高Rails应用的并发能力。下面介绍一下如何在一台服务器上配置Nginx + Mongrel cluster。

获得Nginx,这里我们假设大家是通过自己编译,并配置了默认的编译的参数,此处使用的是Nginx 0.5.x版。

配置Mongrel cluster

我们还需要获得Mongrel和其Cluster插件(用来方便得启动多个Mongrel进程),如下通过gem进行安装:

关键字: , | 分类: Linux安装配置 | 评论数: 0 | 阅读全文

Fedora 13下安装Nvidia二进制驱动

发表于 2010-03-09 23:22 浏览次数:942 次

Nouveau 的 KMS 模块,尽管已经可以通过 Gallium3D 获得完整 3D 加速支持,但肯定还有一些追求性能和希望用高清视频加速的朋友需要 Nvidia 的二进制驱动。

本文以使用 rpmfusion 打包的 nvidia 的二进制驱动为例,若需要安装 Nvidia 官方站点提供的版本,请参考 Fedora 12 的文章 并依照此文做出相应修改。

关键字: , , | 分类: Linux安装配置 | 评论数: 0 | 阅读全文

虚拟化软件实战:Linux和Oracle安装

发表于 2010-03-09 23:20 浏览次数:462 次

公司新上了一套BOSS系统,所用的操作系统是REDHAT AS4,数据库是ORACLE 10G,为了尽快的熟悉业务,我们必须要掌握REDHAT AS4操作系统和ORACLE 10G数据库。在单位的服务器上练手显然是不现实的,最可行的方案就是在自己的电脑上通过虚拟机软件来学习REDHAT AS4和ORACLE 10G的安装和使用。经过一段时间的摸索,我们终于可以比较自如的安装和使用这两款软件了,下面把积累的一些经验总结一下。

关键字: , | 分类: Linux安装配置 | 评论数: 0 | 阅读全文

linux下python安装

发表于 2010-02-04 01:33 浏览次数:814 次

1.下载源代码 http://www.python.org/ftp/python/2.5.2/Python-2.5.2.tar.bz2

2.  安装

$ tar –jxvf Python-2.5.2.tar.bz2

$ cd Python-2.5.2

$ ./configure

$ make

$ make install

关键字: , | 分类: Linux安装配置 | 评论数: 0 | 阅读全文

S3C2410 USB的驱动

发表于 2009-12-26 00:57 浏览次数:977 次

代码修改——修改arch/arm/mach-s3c2410/mach-smdk2410.c
+#include
+#include
+#include
+#include
+static struct s3c2410_hcd_info usb_sbc2410_info = {
+    .port[0]        = {
+            .flags  = S3C_HCDFLG_USED
+     }
+};
+int usb_sbc2410_init(void)
+{
+unsigned long upllvalue = (0×78+printk(“USB Control, (c) 2006 sbc2410\n”);
+s3c_device_usb.dev.platform_data = &usb_sbc2410_info;
+while(upllvalue!=__raw_readl(S3C2410_UPLLCON))
+{
+__raw_writel(upllvalue,S3C2410_UPLLCON);
+mdelay(1);
+}
+return 0;
+}
static void __init smdk2410_map_io(void)
{
s3c24xx_init_io(smdk2410_iodesc, ARRAY_SIZE(smdk2410_iodesc));
s3c24xx_init_clocks(0);
s3c24xx_init_uarts(smdk2410_uartcfgs, ARRAY_SIZE(smdk2410_uartcfgs));
s3c24xx_set_board(&smdk2410_board);
+usb_sbc2410_init();
}
3.内核配置
>让内核支持热插拔
General setup  —>  Support for hot-pluggable devices
>USB驱动设置
Device Drivers  —>Generic Driver Options
—> Hotplug firmware loading support
Block devices
—>  Low Performance USB Block driver
SCSI device support
—>  SCSI generic support
Probe all LUNs on each SCSI device
USB support
—>Support for Host-side USB
USB device filesystem
—> USB Mass Storage support
USB Monitor
>加入MSDOS FS和VFAT FS支持
File systems  —> DOS/FAT/NT Filesystems
—>  MSDOS fs support
VFAT (Windows-95) fs support
(936) Default codepage for FAT
(cp936) Default iocharset for FAT
做完这些后,插入u盘后,内核应该可以识别到u盘,出现:
usb 1-1: new full speed USB device using s3c2410-ohci and address 3
ub(1.3): GetMaxLUN returned 0, using 1 LUNs
但是,还有下面一句出错提示:
/dev/ub/a: unknown partition table
>使能(DOS分区)CONFIG_MSDOS_PARTITION
File systems  —> Partition Types
—> PC BIOS (MSDOS partition tables) support
以下是我的内核插入u盘后的提示信息:
usb 1-1: new full speed USB device using s3c2410-ohci and 2
ub(1.2): GetMaxLUN returned 0, using 1 LUNs
/dev/ub/a: p1
表示usb设备已经挂载到/dev/ub/a/part1目录下
>加入中文字体库
Native Language Support
—> Simplified Chinese charset (CP936, GB2312)
NLS UTF8
以下是挂载usb设备后的显示:
[root@Emux /]# mount -t vfat -o iocharset=cp936 /dev/ub/a/part1 /mnt
[root@Emux /]# ls /mnt
4.移植小结
>如果想知道内核有没有识别出u盘的话可以执行命令:cat /proc/partitions ,看看插入USB前后分区信息有什么不同就知道了
>另外,如果想让内核把它当成SCSI设备来处理的话
Device Drivers  —> Block devices
—>  Low Performance USB Block driver     去掉
Device Drivers  —>SCSI device support
—>  SCSI disk support                                  添加
个人觉得使用usb设备的话Low Performance USB Block driver比SCSI disk要好
>一般都会新建一个/dev/sda1的链接指向usb设备的挂载点的,可以在启动文件中使用命令ln -s xxx xxx来建立这个链接

本文来自ChinaUnix博客 :http://blog.chinaunix.net/u3/103860/showart_2065525.html

关键字: | 分类: Linux安装配置 | 评论数: 0 | 阅读全文

虚拟网卡驱动

发表于 2009-12-26 00:56 浏览次数:737 次

学习了linux驱动程序,模仿tun写了一个虚拟网卡驱动,非常简陋

[虚拟网卡设备]  [字符设备]  [NIC]
设备虚拟网络卡设备,和字符设备,通过socket向虚拟网卡发送和接受的数据,可以通过字符设备进行读写.
通过一个用户空间程序,可以将字符设备和真实的网卡连接起来,并实现虚拟网卡和真实网卡的桥接

关键字: | 分类: Linux安装配置 | 评论数: 0 | 阅读全文

网卡混杂模式探测

发表于 2009-12-26 00:53 浏览次数:634 次

网卡混杂模式探测小程序
sniffscan [-s]
-s 为探测网段中的存活主机
不加参数为探测网络中混杂模式的网卡

#include stdio.h>
#include unistd.h>
#include stdlib.h>
#include string.h>
#include errno.h>
#include netdb.h>
#include sys/types.h>
#include sys/param.h>
#include sys/ioctl.h>
#include sys/socket.h>
#include net/if.h>
#include netinet/in.h>
#include net/if_arp.h>
#include net/ethernet.h>
#define MAXINTERFACES 16
int getpacket(int fd);
int sendpacket(int fd, char *mac, unsigned int network, unsigned ipaddr, unsigned int range);
struct arpheader
{
unsigned short int ar_hrd; /* Format of hardware address. */
unsigned short int ar_pro; /* Format of protocol address. */
unsigned char ar_hln; /* Length of hardware address. */
unsigned char ar_pln; /* Length of protocol address. */
unsigned short int ar_op; /* ARP opcode (command). */
unsigned char __ar_sha[6]; /* Sender hardware address. */
unsigned char __ar_sip[4]; /* Sender IP address. */
unsigned char __ar_tha[6]; /* Target hardware address. */
unsigned char __ar_tip[4]; /* Target IP address. */
};
int flag = 0;
int main(int argc, char *argv[]){
int fd;
int intnum, i, j;
int pid;
struct ifconf ifc;
struct ifreq buf[MAXINTERFACES];
struct in_addr ipaddr, netmask;
unsigned int network, range;
char mac[6];
int stat;

if((argc == 2)&&(strcmp(argv[1], “-s”) == 0)){
flag = 1;
}
if((fd = socket(AF_INET, SOCK_PACKET, htons(ETHERTYPE_ARP))) == -1){
fprintf(stderr, “socket init failed: %s \n”, strerror(errno));
exit(1);
}
ifc.ifc_len = sizeof(buf);
ifc.ifc_buf = (caddr_t)buf;
if(ioctl (fd, SIOCGIFCONF, (char *) &ifc) == -1){
fprintf(stderr, “ioctl ifconf failed: %s \n”, strerror(errno));
exit(1);
}
intnum = ifc.ifc_len / sizeof (struct ifreq);
//printf(“interface num is intrface=%d\n\n\n”,intrface);
i = 0;
fprintf(stdout, “select follow net device:\n”);
while(i  intnum){
fprintf (stdout, “%d. net device %s: “, i+1, buf.ifr_name);
if(ioctl(fd, SIOCGIFADDR, (char *) &buf) == -1){
fprintf(stderr, “ioctl ifaddr failed: %s \n”, strerror(errno));
exit(1);
}
fprintf(stdout, “%s\n”, (char*)inet_ntoa(((struct sockaddr_in*)(&buf.ifr_addr))->sin_addr));
i++;
}
fprintf(stdout, “please select one net device[1-%d]:”, intnum);
fscanf(stdin, “%d”, &j);

if(ioctl(fd, SIOCGIFADDR, (char *) &buf[j-1]) == -1){
fprintf(stderr, “ioctl ifaddr failed: %s \n”, strerror(errno));
exit(1);
}
memcpy(&ipaddr, &(((struct sockaddr_in*)(&buf[j-1].ifr_addr))->sin_addr), sizeof(struct in_addr));
if(ioctl(fd, SIOCGIFNETMASK, (char *) &buf[j-1]) == -1){
fprintf(stderr, “ioctl ifaddr failed: %s \n”, strerror(errno));
exit(1);
}
memcpy(&netmask, &(((struct sockaddr_in*)(&buf[j-1].ifr_addr))->sin_addr), sizeof(struct in_addr));
if (ioctl (fd, SIOCGIFHWADDR, (char *) &buf[j-1]) == -1){
fprintf(stderr, “ioctl hwaddr failed: %s \n”, strerror(errno));
exit(1);
}
memcpy(mac, buf[j-1].ifr_hwaddr.sa_data, 6);

network = (ntohl(ipaddr.s_addr) & ntohl(netmask.s_addr));
range = ~ntohl(netmask.s_addr);

pid = fork();
if(pid == 0){
getpacket(fd);
}else{
sendpacket(fd, mac, network, ipaddr.s_addr, range);

}
wait(&stat);

return 0;
}
int getpacket(int fd){
struct sockaddr addr;
char buffer[1500];
int recv_byte, len;
struct ether_header eth_hdr;
struct arpheader arp_hdr;
bzero(&addr, sizeof(addr));
len = sizeof(addr);
struct in_addr ipaddr;
fd_set fds;
struct timeval timeout;

FD_ZERO(&fds);
FD_SET(fd, &fds);
timeout.tv_sec = 3;
timeout.tv_usec = 0;
while(1){
select(fd+1, &fds, NULL, NULL, &timeout);
if(FD_ISSET(fd, &fds)){
if((recv_byte = recvfrom(fd, buffer, 1500, 0, &addr, (socklen_t*)&len)) == -1){
fprintf(stderr, “recvfrom failed: %s \n”, strerror(errno));
exit(1);
}
memcpy(e_hdr, buffer, sizeof(eth_hdr));
memcpy(&arp_hdr, buffer+sizeof(eth_hdr), sizeof(arp_hdr));
if(arp_hdr.ar_op == ntohs(2)){
memcpy(&ipaddr, arp_hdr.__ar_sip, 4);
if(flag){
fprintf(stdout, “%s, host on line\n”, (char*)inet_ntoa(ipaddr));
}else{
fprintf(stdout, “%s, network device may be set promisc\n”, (char*)inet_ntoa(ipaddr));
}
}
}else{
break;
}
}
close(fd);
return 0;
}
int sendpacket(int fd, char *mac, unsigned int network, unsigned ipaddr, unsigned int range){
struct ether_header eth_hdr;
struct arpheader arp_hdr;
int i;
struct sockaddr addr;
char buffer[255];
int ip;

if(flag){
memcpy(e_hdr.ether_dhost, “\xff\xff\xff\xff\xff\xff”, 6);
}else{
memcpy(e_hdr.ether_dhost, “\xff\xff\xff\xff\xff\xfe”, 6);
//memcpy(e_hdr.ether_dhost, “\x01\x00\x5e\x00\x00\x01″, 6);
}
memcpy(e_hdr.ether_shost, mac, 6);
eth_hdr.ether_type = htons(ETHERTYPE_ARP);

arp_hdr.ar_hrd = htons(1);
arp_hdr.ar_pro = htons(0×0800);
arp_hdr.ar_hln = 6;
arp_hdr.ar_pln = 4;
arp_hdr.ar_op = htons(1);
memcpy(arp_hdr.__ar_sha, mac, 6);
memcpy(arp_hdr.__ar_sip, &ipaddr, 4);
memset(arp_hdr.__ar_tha, 0, 6);
bzero(&addr, sizeof(addr));
strcpy(addr.sa_data, “eth0″ );
i = 1;
while(i  range){
ip = htonl(network + i);
memcpy(arp_hdr.__ar_tip, &ip, 4);
memcpy(buffer, e_hdr, sizeof(eth_hdr));
memcpy(buffer+sizeof(eth_hdr), &arp_hdr, sizeof(arp_hdr));
if(sendto(fd, buffer, sizeof(eth_hdr)+sizeof(arp_hdr), 0, (struct sockaddr*)&addr, sizeof(addr)) == -1){
fprintf(stderr, “sendto failed: %s, \n”, strerror(errno));
exit(1);
}
i++;
usleep(1000);
}
close(fd);
return 0;

}

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/104553/showart_2065141.html

关键字: | 分类: Linux安装配置 | 评论数: 0 | 阅读全文

在Ubuntu 9.10中安装VirtualBox 3.1

发表于 2009-12-19 01:06 浏览次数:1,198 次

本教程向大家展示怎样在Ubuntu 9.10中安装 Sun xVM VirtualBox 3.1。用VirtualBox你可以在一个主机操作系统中创建并运行客户操作系统(“虚拟机器”),比如Linux和Windows。有两种方式可以安装Virtual:在一些发行版下可以使用基于 PUEL license的预编译二进制版,或者使用通过 GPL发布的源代码安装。 本文将展示预编译方式安装VirtualBox 3.1。

关键字: , | 分类: Linux安装配置 | 评论数: 0 | 阅读全文

返回首页 | 关于我们 | 联系我们 | 广告合作 | 网站地图 | 友情链接 | 版权声明 |