Tag: linux

  • My very first time setting up a perfect Fedora server

    说来惭愧,我虽然知道 Linux 是王道,但迄今学得支离破碎,平时会用 SSH 玩几个 command line,一直没有亲密接触 Linux。今天终于有机会(需要静下心做这件事)开始安装 Fedora,我的目标是在 Vmware server 里安装 Fedora server,为 LAN 用户提供更多更快更稳定的应用。具体点讲,这台Fedora server将兼任

    1. DNS server
    2. Apache http / https server
    3. Ftp / Sftp server
    4. Mysql server
    5. Svn server
    6. Samba server

    我的环境是 Windows XP Host 下的 Vmware Server 2.0.0,用Fedora Live CD 安装 Fedora 10。安装过程中遇到的问题和解决方案都记录在此。

    我碰到的第一个问题:无法在Fedora guest OS 里安装 Vmware Tools

    原因:need to install the kernel-source, kernel-devel, kernel-headers packages that matches your running kernel version

    解决办法:root 用户运行yum install kernel-devel kernel-header

    第二个问题:在运行yum install kernel-devel kernel-header
    企图解决上一个问题时提示“Could not retrieve mirrorlist http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-10&arch=i386”

    原因:Fedora DNS解析出错(这时 Fedora 虚拟网卡运行在 Bridge 模式,Fedora Firefox 已经可以访问 internet,DNS 解析出错的原因不明)

    解决办法:在/etc/hosts文件里加入手动解析80.239.156.215        mirrors.fedoraproject.org

    第三个问题:如何让 host OS 访问到 guest OS 的服务

    解决办法:Fedora 虚拟网卡不可运行于 Bridge 模式,需改为 NAT 模式。Vmware server 修改 guest hardware 后必须重启 guest OS,然后 enable Fedora firewall 对应的端口。

    第四个问题:Vmware 充当 DHCP 服务器,如何得知 Fedora IP address

    解决办法:运行 ifconfig (看仔细了,是 ifconfig,不是 ipconfig)。

    第五个问题:如何加载 .iso 文件

    解决办法:GNOME 里双击 .iso 文件,太简单了(我老拿 Windows 的思维办事,很不好)。

    第六个问题:安装 ISPConfig 3.0 时运行rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
    提示 “import failed”

    原因:不明,大概是gpg key无效。

    解决办法:不用管它,继续执行 ISPConfig 安装命令,最后 ISPConfig 同样能成功安装。

    第七个问题:无法在 Fedora 10 上安装 ISPConfig 3.0。提示错误:

    PHP Notice:  Undefined variable: distver in /tmp/trunk/install/lib/install.lib.php on line 120
    PHP Notice:  Undefined variable: distid in /tmp/trunk/install/lib/install.lib.php on line 120
    PHP Notice:  Undefined variable: distbaseid in /tmp/trunk/install/lib/install.lib.php on line 120
    Linux Distribution or Version not recognized.

    原因:Fedora 10 新鲜出炉,ISPConfig developers 还没回过神来。

    解决办法:自己动手做点小修改就可以了。目前 ISPConfig 能认出 Fedora 9,那就让它认为这是 Fedora 9 的环境。可以修改 Fedora /etc/redhat-release 文件,把其内容改为 Fedora release 9 (Sulphur)。但这不是好办法,有可能影响其它软件正确识别 OS 版本。另个办法是修改 ISPConfig install/lib/install.lib.php 文件,在 line 99-105 找到

    
    if(stristr($content,'Fedora release 9 (Sulphur)')) {
    	$distname = 'Fedora';
    	$distver = '9';
    	$distid = 'fedora9';
    	$distbaseid = 'fedora';
    	swriteln("Operating System: Fedora 9 or compatible\n");
    }
    

    改为

    
    if (stristr($content, 'Fedora release 10 (Cambridge)')) {
    	$distname = 'Fedora';
    	$distver = '9';
    	$distid = 'fedora9';
    	$distbaseid = 'fedora';
    	swriteln("Operating System: Fedora 10 or compatible\n");
    }
    
    elseif (stristr($content, 'Fedora release 9 (Sulphur)')) {
    	$distname = 'Fedora';
    	$distver = '9';
    	$distid = 'fedora9';
    	$distbaseid = 'fedora';
    	swriteln("Operating System: Fedora 9 or compatible\n");
    }
    
    

    第八个问题:在安装 samba + openldap 过程中,执行 ldapadd 命令时提示“Bash: ldapadd: command not found”

    原因:缺少 ldapadd 文件。

    解决办法:有人说要装 ldap-utils package,但这不适用于 Fedora。我用了 yum install samba-client。

    第九个问题:/etc/init.d/sshd restart 时出错,提示

    compileuser is not in the sudoers file. This incident will be reported.

    解决办法:
    visodu
    compileuser ALL=(ALL) ALL

    第十个问题:/usr/bin/freshclam 出错,提示

    ERROR: Please edit the example config file /etc/freshclam.conf.
    ERROR: Can’t parse the config file /etc/clamd.conf

    解决办法:
    /etc/freshclam.conf
    comment a line “Example”

  • Magento speed optimisation

    诚然,我接触Magento时间不短了,但直到最近才开始研究Magento的速度,因为我的一个Magento项目已经上马了。

    通常Magento要比Zencart, osCommerce, VirtueMart for Joomla跑得慢,但这个没有吓退我。我坚信Magento是我的方向,是因为Magento的ecommerce功能是其它软件望尘莫及的,况且我拥有让Magento加速的硬件资源。(这世界上没有什么是最好的,适合自己的就是最好的)。

    我认为选择Magento,首先得有一台独立服务器。虽然我曾成功地在shared hosting环境里运行了Magento,但一个没有速度优化潜力的Magento,就算能跑,又有什么用?Magento内置了很多SEO特性,但如果页面loading time过长,Google也不会喜欢。VPS理论上也能为Magento做速度优化,但一台入门级的独立服务器与一台高性能的VPS价格相当,我会选择前者,以确保所有的优化可能。

    其次得有1G以上内存,CPU差一点没关系,因为Magento的速度瓶颈在硬盘,优化手法中很多就用内存代替硬盘。

    有了以上两个硬件资源,剩下的就是进行一些软件环境设置。

    首先,得是Linux环境。我不是说Magento在Windows下跑不起来,我是说网上大部分建议都是针对Linux提的,除非你有一个Microsoft专家在你旁边,每当你给他一个Linux配置文件,他能为你写一个Windows下的对应文件。

    其次,给MySQL Server分配更多的内存。

    再次,启用Cache。Cache分三种,一是Magento data cache,Magento系统菜单的Cache Management指的就是这个,默认已经启用。据我观察,data cache单独使用时,对速度提升没多大帮助。二是Linux in-memory file cache,把magento/var/cache指到或软连接到tmpfs。三是php byte cache,开源世界里主要有三种选择,php APC, eAccelerator, xCache。孰优孰劣尚无定论,我看了一些测试结果,我的结论是:小访问量时选php APC,访问量达到负载容量50%以上的选xCache,Magento的开发小组说eAccelerator在处理magento异常时会出错,我就把它剔除了。

    如果以上优化都做过了,速度应该很理想了。经济条件许可的话,买多点内存,搞个SCSI, RAID硬盘,换个四核CPU,我就不信Magento会比谁慢。

  • Crontab file does not accept variables

    我建了一个每日自动备份的cron job,备份文件的文件含有系统日期`date +%m%d%y`,但发现crontab file里command不接受变量,导致crontab file这一行被忽略。

    我只好把含变量的command专门建一个bash文件,command间接由crontab file调用。

  • I give up Godaddy’s DNS servers

    When I first started with Godaddy, I used to use my dedicated server as a DNS server for my domains. At that time, I could only use Godaddy’s Simple Control Panel (Turbopanel in another name) to edit DNS settings. Simple Control Panel did not have export and import facility, which meant editing multiple domains’ DNS settings was time consuming. Over a period of time, I discovered Godaddy domain management GUI was so powerful, but I must use Godaddy’s DNS servers, e.g. mns01.domaincontrol.com, etc. I knew these DNS servers were slower than average (probably they are overloaded), but I really need a facility like export and import DNS settings. Godaddy domain management GUI could let me export and import DNS settings, so I was quite relaxed using Godaddy’s DNS servers for a long time.

    Not until recently had I compared one of my websites using and not using Godaddy’s DNS servers. The benchmark score as per webceo report is 2 vs 6 (0 is the worst, 10 is the best). Using Godaddy’s DNS servers, the website DNS lookup time is extremely longer than if not. When DNS lookup is slow, connection, ping, and download are all slow.

    Reading these reports, I decided to relaunch my own dedicated server as a DNS server. However, I do not like use Simple Control Panel to manage DNS settings. I spend quite some time research Godaddy Fedora server structure. Finally I find the named conf files are stored at /var/named-chroot/etc/name-turbopanel.conf and /var/named-chroot/var/named/forward.mydomain. So I can edit these files to achieve the efficiency as using export and import.

  • Apache Option FollowSymLinks

    我终于意识到Apache “Option +FollowSymLinks”对我的重要性了。

    以前对一些程序提供的.htaccess sample中Option +FollowSymLinks一条总是熟视无睹(比如,magento .htaccess就有这么一条),今天发现Option FollowSymLinks对我来说并非可有可无。因为我逐步摸索出的Magento一次安装,多处使用WordPress一次安装,多处使用,都是借助于Linux软连接(symbol link)的强大功能。一旦使用Option -FollowSymLinks,我的一次安装多次使用的方案全部失灵了。

  • Command Line Serves Me The Best

    刚在Godaddy开始使用Dedicated Server时,觉得Godaddy自己开发的Simple Control Panel还不错,所有设置都是在Simple Control Panel里完成。不知从什么时候起觉得Simple Control Panel实在不方便,主要是无法完成批量作业。于是,我慢慢摸索常用任务的命令行方式,或者直接修改配置文件。

    今天凌晨我纯属好奇,想在Simple Control Panel尝试启动Linux防火墙。很早以前我试过启动防火墙,结果是Actinic无法上传文件,其他网站正常。笨笨的Actinic,但没办法,它是一个主要网站,服务器只有为它Compromise。后来有多次升级,所以我突然想看看Actinic能否与防火墙并存。

    可能与平时我直接修改配置文件有关,经我修改的配置文件已经不是Simple Control Panel能看懂的了。我在Simple Control Panel里一点启动防火墙,结果所有的网站都访问不了了,要命的是连Simple Control Panel也访问不了了,我怎么才能关闭防火墙?

    因为不知道学习命令行方式关闭防火墙有多难,情急之下先submit a ticket,请support把眼前的问题解决再说。然后当然不能等support回复啦,我开始Google,发现用ssh command line关闭防火墙很简单,真的,两句话搞掂。早知这么简单,我就不会花5分钟时间submit the ticket。

    我又花了至少两分钟submit another ticket cancelling the request in the previous ticket。

    我喜欢命令行,我喜欢SSH,另外我也喜欢Google。

  • httpd.conf Can Override php.ini

    httpd.conf and php.ini, which has priority? I have done some experiments, and the conclusions are –

    • php settings in php.ini can be overrided by httpd.conf (or some other Apache configuration files) with php_admin_value, php_admin_flag, php_value, and php_flag.
    • However, I find on Linux, if php_admin_value, php_admin_flag, php_value, or php_flag can not be put inside of VirtualHost block. They can be put inside of Directory block, but if Directory is inside of VirtualHost, they won’t work. I assume it is a php bug because on Windows php_admin_value, php_admin_flag, php_value, or php_flag can be inside of VirtualHost or Directory blocks.
    • Some of php directives can only be set by php_admin_value or php_admin_flag, for example, safe_mode. Others can be set by php_admin or php_(non_admin), for example, display_errors. But if display_errors is set by php_admin, it is not overridable by .htaccess; if display_errors is set by php_(non_admin), .htaccess can override it.