架设通过 SSH 和 HTTP 协议的 Git 服务器

本文描述如何架设通过 SSH 协议和 HTTP 协议的 Git 服务器,以 Ubuntu 操作系统为例。通过 SSH 协议方式 push,而 HTTP 方式则提供给匿名用户 clone。

这个方案可以通过用户和文件系统的权限很方便的控制项目的访问权限,开源还是闭源。

软件需求
1. git-core
2. openssh-server
3. apache2

服务器端
1. 安装 git-core

sudo apt-get install git-core

2. 创建 git 用户和组
可以使用密码认证,也可以使用证书。

sudo groupadd git
sudo useradd -d /home/git -m -g git git
sudo passwd git

3. 创建虚拟主机
这个不详细说了,没有什么特别设置。这里假设根目录是 /home/git/

4. 创建一个新的版本库

mkdir /home/git/test.git
cd /home/git/test.git
git --bare init
chmod +x hooks/post-update

客户机端
1. push 到远程版本库

mkdir test
cd test
git init
echo "test" > README
git add .
git commit -m 'Init.'
git remote add origin git@server_addr:test.git
git push origin master

2. clone 远程版本库

git clone http://server_addr/test.git

Over!

记录一个 Makefile

# Makefile for sphone
 
PP=cpp
CC=gcc
CCFLAGS=`pkg-config --cflags gtk+-2.0`
LDFLAGS=`pkg-config --libs gtk+-2.0`
 
SRCDIR=src
BINDIR=bin
BUILDDIR=build
 
TARGET=$(BINDIR)/sphone
CCOBJSFILE=$(BUILDDIR)/ccobjs
-include $(CCOBJSFILE)
LDOBJS=$(patsubst $(SRCDIR)%.c,$(BUILDDIR)%.o,$(CCOBJS))
 
DEPEND=$(LDOBJS:.o=.dep)
 
all : $(CCOBJSFILE) $(TARGET)
	@$(RM) $(CCOBJSFILE)
 
clean : 
	@echo -n "Clean ... " && $(RM) $(BINDIR)/* $(BUILDDIR)/* && echo "OK"
 
$(CCOBJSFILE) : 
	@echo CCOBJS=`ls $(SRCDIR)/*.c` > $(CCOBJSFILE)
 
$(TARGET) : $(LDOBJS)
	@echo -n "Linking $^ to $@ ... " && $(CC) -o $@ $^ $(LDFLAGS) && echo "OK"
 
$(BUILDDIR)/%.dep : $(SRCDIR)/%.c
	@$(PP) $(CCFLAGS) -MM -MT $(@:.dep=.o) -o $@ $<
 
$(BUILDDIR)/%.o : $(SRCDIR)/%.c
	@echo -n "Building $< ... " && $(CC) $(CCFLAGS) -c -o $@ $< && echo "OK"
 
-include $(DEPEND)

Over!

命令行版本的 SIP 客户端 - pjsua

pjsua 是 pjproject 项目的一个例程,它是命令行版本的,我测试了一下穿越 NAT 效果很好,同时资源占用也非常少,在使用 speex 编码通话时,上传和下载的宽带都是 1.5-2.0 KB/s,通话清晰。

源代码下载:http://www.pjsip.org/download.htm
二进制程序:sftp://sftp:sftp@heiher.info:heiher/files/
使用文档:http://www.pjsip.org/pjsua.htm

需要修改的部分

#
# Account 0:
#
--id sip:username@sip.voipuser.org
--registrar sip:sip.voipuser.org
--reg-timeout 300
--realm sip.voipuser.org
--username username
--password password
 
#
# Network settings:
#
--local-port 5060
--stun-srv stun.voipuser.org

Over!

Apache 服务器的 WordPress 固定链接配置

Apache 配置
1. 启用 rewrite 模块

sudo a2enmod rewrite

2. 虚拟主机配置中设置 AllowOverride all

sudo vim /etc/apache2/sites-available/hostxxx
<Directory ...>
    ... ...
    AllowOverride all
</directory>

删除 .htaccess
删除虚拟主机相应目录的 .htaccess 文件

WordPress 固定链接设置
登录 WordPress 后台设置固定链接,具体参考官方文档

Over!

Apache 虚拟主机之间访问权限控制(特权分离)

使用 Apache 架设虚拟主机的用户会遇到这样的问题,例如有两个虚拟主机分别是 www.hosta.comwww.hostb.com,对应的目录是 /home/hosta//home/hostb/ 需要限制 www.hosta.com 访问 /home/hostb/,同样也需要限制 www.hostb.com 访问 /home/hosta/。那么应该如何实现呢?

我的方法是使用指定的用户运行虚拟主机的进程,下面来说说具体的配置过程。

安装 apache2-mpm-itk
apache2-mpm-itk 虽然没有 apache2-mpm-perfork 的性能高,但是安全第一!

sudo apt-get install apache2-mpm-itk

修改配置文件指定用户和组

sudo vim /etc/apache2/sites-available/hosta
<VirtualHost *:80>
	... ...
	... ...
	<IfModule mpm_itk_module>
		AssignUserId username groupname
	</IfModule>
</VirtualHost>

设置目录属性

chown username:groupname /home/hosta/
chmod 700 /home/hosta/

通过这样的设置后,就不需要开启 PHP 的安全模式(safe_mode)了,因为安全模式会引起很多的问题。

同时也解决了 Web 和 FTP 的权限同步问题,一举多得。

Over!

用 SQL 语句修改 WordPress 文章和博客链接

修改文章中的链接

UPDATE wp_posts SET post_content = REPLACE(post_content, 'oldvalue', 'newvalue');

修改博客地址

UPDATE wp_options SET option_value = REPLACE(option_value, 'oldvalue', 'newvalue') WHERE option_name='siteurl';
UPDATE wp_options SET option_value = REPLACE(option_value, 'oldvalue', 'newvalue') WHERE option_name='home';

Over!

通过 PHP 备份 MySQL 数据库

空间没有提供任何形式的数据库管理方式,可以用下面的方法备份数据库。编写一个程序的 php 程序,例如 backupdb.php

<?php exec("mysqldump -u\"username\" -p\"password\" \"dbname\" > db-`date +%Y%m%d`.sql"); ?>

注意目录要可写防止数据泄漏

Over!

取消自动运行 X Window

今天升级了龙芯机器的所有软件包,误操作将 xserver-xorg 一起给升级了,结果导致机器启动到图形界面就死机。而我又只有一个系统,没有其它的修复启动盘。

我用下面的 PMON 命令以单用户模式(不自动进行图形界面)启动了系统,删除了 /etc/rc2.d/S19gdm 文件解决了这个问题。

load /dev/fs/ext2@wd0/vmlinux-2.6.32.7
g console=tty root=/dev/hda2 rootfstype=ext no_auto_cmd quiet S

在输入 root 用户的密码后,使用下面的命令取消图形界面的自动执行。

mv /etc/rc2.d/S19gdm /root

Over!