Ubuntu双线双IP配置

软件环境

Ubuntu 14.04

网络环境

两条网络,电信与移动,测试服务器位于内网,移动IP:192.168.1.8,电信IP:192.168.23.8。

路由器使用端口映射对外暴露部分服务。

设置网络

/etc/network/interfaces

auto em1
#iface em1 inet dhcp
iface em1 inet static
address 192.168.1.8
gateway 192.168.1.1
netmask 255.255.255.0
broadcast 192.168.1.255
network 192.168.1.0

auto em2
iface em2 inet static
address 192.168.23.8
netmask 255.255.255.0

em1 使用移动网络,服务器默认出口。em2 使用电信网络,不设置网关。

设置路由表,实现原路返回数据

修改:/etc/iproute2/rt_tables 文件,增加条记录

252 mobile
251 telecom

执行命令:

ip route flush table telecom
ip route add default via 192.168.23.1 dev em2 src 192.168.23.8 table telecom
ip rule add from 192.168.23.8 table telecom

将以上命令加入 /etc/rc.local 实现重启配置不丢失。

在这个案例中,移动为默认网络,所以不需要特殊配置路由表,否则会导致网络不通。

设置路由表,实现指定网络访问特定内容

route add -host 91.189.95.83 gw 192.168.23.1

91.189.95.83 是 launchpad.net 源的IP地址,移动访问不稳定,这里指定网关使用电信网络访问。

结语

网上很多教程是错误的,主要在实现原路返回数据部分,很多人都说要写两个网络的路由表,但这会直接导致网络不通,我也在这里卡了很久。

GitLab 官方安装文档中文翻译

译者注:gitlabhq + gitolite是目前为止个人认为最好用的 git 中心库管理系统,但是其安装配置不是一般的复杂,找了半天没发现完整的中文安装文档,只好依靠自己蹩脚的英文班门弄斧下,若有错误还请见谅。

原文地址:https://github.com/gitlabhq/gitlabhq/blob/stable/doc/installation.md

译者:殷志刚

平台需求:

此项目被设计用于Linux操作系统。

也许可以工作在 FreeBSD 与 Mac OS 系统,但我们无法保证系统稳定性与功能完整性。

官方支持的 Linux 发行版:

  • Ubuntu Linux
  • Debian/GNU Linux

它应该工作于:

  • Fedora
  • CentOS
  • RedHat

你使用这些系统需要些运气,但不保证稳定性:

  • MacOS X
  • FreeBSD

GitLab 不能运行于 Windows 并且我们也没有支持的计划。

硬件需求:

我们推荐至少 1GB 内容用于 gitlab 实例。

本安装指南已于 Debian/Ubuntu 测试通过。

  • 安装总共需要6步:
  • 安装依赖包
  • 安装 Ruby
  • 安装 Gitolite
  • 安装与配置 GitLab
  • 启动前端Web服务器
  • 启动Resque进行(用于后台任务)

重要信息

在你发邮件列表询问安装与配置问题之前请确认你已经根据本文完成了所有步骤。

Only create a GitHub Issue if you want a specific part of this installation guide updated.

Also read the Read this before you submit an issue wiki page.

使用这个安装脚本可以轻易的跳过前3个步骤。

# 安装 curl 与 sudo
apt-get install curl sudo

# 三合一命令 :)
curl https://raw.github.com/gitlabhq/gitlab-recipes/master/install/debian_ubuntu.sh | sh

现在你可以直接到到第四步

如果你在 Amazon Web Services 使用 Ubuntu 12.04,你可以使用一个命令跳过所有步骤(1-6)

curl https://raw.github.com/gitlabhq/gitlab-recipes/master/install/debian_ubuntu_aws.sh | sh

更多详细信息,你可以阅读此脚本的 HOWTO 部分。

1. 安装依赖包

请记住,Debian 默认并没有安装 sudo,请使用 root 安装它:

apt-get update && apt-get upgrade && apt-get install sudo

现在你可以安装必须包:

sudo apt-get update
sudo apt-get upgrade

sudo apt-get install -y wget curl gcc checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libreadline6-dev libc6-dev libssl-dev libmysql++-dev make build-essential zlib1g-dev libicu-dev redis-server openssh-server git-core python-dev python-pip libyaml-dev postfix libpq-dev

数据库

SQLite

sudo apt-get install -y sqlite3 libsqlite3-dev

MySQL

sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev

# Login to MySQL
$ mysql -u root -p

# Create the GitLab production database
mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;

# Create the MySQL User change $password to a real password
mysql> CREATE USER 'gitlab'@'localhost' IDENTIFIED BY '$password';

# Grant proper permissions to the MySQL User
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'gitlab'@'localhost';

PostgreSQL

sudo apt-get install -y postgresql-9.2 postgresql-server-dev-9.2

# Connect to database server
sudo -u postgres psql -d template1

# Add a user called gitlab. Change $password to a real password
template1=# CREATE USER gitlab WITH PASSWORD '$password';

# Create the GitLab production database
template1=# CREATE DATABASE IF NOT EXISTS gitlabhq_production;

# Grant all privileges on database
template1=# GRANT ALL PRIVILEGES ON DATABASE gitlabhq_production to gitlab;

# Quit from PostgreSQL server
template1=# \q

# Try connect to new database
$ su - gitlab
$ psql -d gitlabhq_production -U gitlab

(译者注:以上3种数据库根据需要安装其一即可)

2. 安装 Ruby

wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz
tar xfvz ruby-1.9.3-p194.tar.gz
cd ruby-1.9.3-p194
./configure
make
sudo make install

3. 安装 Gitolite

为 Git 创建用户:

sudo adduser \
--system \
--shell /bin/sh \
--gecos 'git version control' \
--group \
--disabled-password \
--home /home/git \
git

为 GitLab 创建用户:

# ubuntu/debian
sudo adduser --disabled-login --gecos 'gitlab system' gitlab

将 gitlab 用户添加到 git 用户组:

sudo usermod -a -G git gitlab

将 git 用户添加到 gitlab 用户组:

sudo usermod -a -G gitlab git

生成密钥:

sudo -H -u gitlab ssh-keygen -q -N '' -t rsa -f /home/gitlab/.ssh/id_rsa

克隆 GitLab 的 Gitolite 分支源代码:

sudo -H -u git git clone -b gl-v304 https://github.com/gitlabhq/gitolite.git /home/git/gitolite

安装:

cd /home/git
sudo -u git -H mkdir bin
sudo -u git sh -c 'echo -e "PATH=\$PATH:/home/git/bin\nexport PATH" >> /home/git/.profile'
sudo -u git sh -c 'gitolite/install -ln /home/git/bin'

sudo cp /home/gitlab/.ssh/id_rsa.pub /home/git/gitlab.pub
sudo chmod 0444 /home/git/gitlab.pub

sudo -u git -H sh -c "PATH=/home/git/bin:$PATH; gitolite setup -pk /home/git/gitlab.pub"

权限:

sudo chmod -R g+rwX /home/git/repositories/
sudo chown -R git:git /home/git/repositories/

检查:退出并重新登录以使 git 用户组生效

# 克隆 admin 资源库以将 localhost 添加到 known_hosts
# 并且确认 gitlab 用户有权访问 gitolite
sudo -u gitlab -H git clone git@localhost:gitolite-admin.git /tmp/gitolite-admin

# 如果执行成功,你可以将其删除
sudo rm -rf /tmp/gitolite-admin

重要! 如果你不能克隆 gitolite-admin 资源库,请不要继续本次安装,请根据 Trouble Shooting Guide 并且确认你已经小心的完成上文的全部步骤。

4. 克隆 GitLab 源代码并安装先决条件

sudo gem install charlock_holmes --version '0.6.8'
sudo pip install pygments
sudo gem install bundler
cd /home/gitlab

# Get gitlab code. Use this for stable setup
sudo -H -u gitlab git clone -b stable https://github.com/gitlabhq/gitlabhq.git gitlab

# Skip this for stable setup.
# Master branch (recent changes, less stable)
sudo -H -u gitlab git clone -b master https://github.com/gitlabhq/gitlabhq.git gitlab

cd gitlab

# Rename config files
sudo -u gitlab cp config/gitlab.yml.example config/gitlab.yml

(译者注:本人在安装 charlock_holmes 时遇到了点儿麻烦,解决办法见这里

选择你希望使用的数据库

# SQLite
sudo -u gitlab cp config/database.yml.sqlite config/database.yml

# Mysql
sudo -u gitlab cp config/database.yml.mysql config/database.yml

# PostgreSQL
sudo -u gitlab cp config/database.yml.postgres config/database.yml

# 修改 config/database.yml 确认输入了正确的用户名/密码

安装数据库 gems

# mysql
sudo -u gitlab -H bundle install --without development test sqlite postgres --deployment

# 或者 postgres
sudo -u gitlab -H bundle install --without development test sqlite mysql --deployment

# 或者 sqlite
sudo -u gitlab -H bundle install --without development test mysql postgres --deployment

初始化数据库

sudo -u gitlab bundle exec rake gitlab:app:setup RAILS_ENV=production

设置 GitLab hooks

sudo cp ./lib/hooks/post-receive /home/git/.gitolite/hooks/common/post-receive
sudo chown git:git /home/git/.gitolite/hooks/common/post-receive

确认应用程序状态:

sudo -u gitlab bundle exec rake gitlab:app:status RAILS_ENV=production


# OUTPUT EXAMPLE
Starting diagnostic
config/database.yml............exists
config/gitlab.yml............exists
/home/git/repositories/............exists
/home/git/repositories/ is writable?............YES
remote: Counting objects: 603, done.
remote: Compressing objects: 100% (466/466), done.
remote: Total 603 (delta 174), reused 0 (delta 0)
Receiving objects: 100% (603/603), 53.29 KiB, done.
Resolving deltas: 100% (174/174), done.
Can clone gitolite-admin?............YES
UMASK for .gitolite.rc is 0007? ............YES
/home/git/share/gitolite/hooks/common/post-receive exists? ............YES

如果所有结果都是 YES,恭喜!你可以继续进行下一步了。

5. 设置 web server

应用可以用下一个命令行动:

# 用于测试目的
sudo -u gitlab bundle exec rails s -e production

# 用于守护进程
sudo -u gitlab bundle exec rails s -e production -d

默认登录用户名及密码:

admin@local.host
5iveL!fe

6. 运行 Resque 进程(用于处理工作队列)

# 手动启动
sudo -u gitlab bundle exec rake environment resque:work QUEUE=* RAILS_ENV=production BACKGROUND=yes

# GitLab 启动脚本
sudo -u gitlab ./resque.sh
# 如果你使用 root 运行此脚本,会导致 /home/gitlab/gitlab/tmp/pids/resque_worker.pid 文件的拥有者为 root
# 将导致 resque 在下一次系统初始化中无法启动

自定义 Resque 使用的 Redis 连接

如果你希望 Resque 连接到一个非标准端口号或另一台服务器上的 Redis,你可以在 config/resque.yml 文件修改连接信息:

production: redis.example.com:6379

好了,我们已经拥有了一个工作正常的 GitLab 了,但请继续下去,有一些事情是必须完成的。

Nginx 与 Unicorn

1. Unicorn

cd /home/gitlab/gitlab
sudo -u gitlab cp config/unicorn.rb.example config/unicorn.rb
sudo -u gitlab bundle exec unicorn_rails -c config/unicorn.rb -E production -D

2. Nginx

# 初次安装 Nginx
sudo apt-get install nginx

# 添加GitLab 到 nginx sites
sudo wget https://raw.github.com/gitlabhq/gitlab-recipes/master/nginx/gitlab -P /etc/nginx/sites-available/
sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab

# 修改 **YOUR_SERVER_IP** 与 **YOUR_SERVER_FQDN**
# 为起初的 IP 地址与准备让 GitLab 服务的域名
sudo vim /etc/nginx/sites-enabled/gitlab

# 重启 nginx:
sudo /etc/init.d/nginx restart

3. Init 脚本

在 /etc/init.d/gitlab 创建 init 脚本:

sudo wget https://raw.github.com/gitlabhq/gitlab-recipes/master/init.d/gitlab -P /etc/init.d/
sudo chmod +x /etc/init.d/gitlab

设置 GitLab 自动启动:

sudo update-rc.d gitlab defaults 21

现在你可以用这种方式启动/重启/停止 GitLab 服务:

sudo /etc/init.d/gitlab restart

 

译者后注:其实通篇主要的全是各种命令,其实不看说明一条命令一条命令的复制粘贴也能安装完成,当然前提是你使用的是Ubuntu/Debian,回头有时间再写些其他系统的实际安装过程。

Gentoo 安装 charlock_holmes

最近折腾gitlab + gitolite,安装到charlock_holmes一步出现一堆 undefined reference 错误,官方网站也有这么一个issue

解决办法:修改/usr/lib64/ruby/1.9.1/x86_64-linux/rbconfig.rb,删除CONFIG[“LDFLAGS”] 一行最后的“-Wl,–no-undefined”,具体原因未知。

KVM使用原生CPU

默认情况下 CentOS 6 安装虚拟机后的CPU是:QEMU Virtual CPU,一般使用是没有问题的,只是性能低下,PHP一个10万次循环的脚本居然需要执行50多秒,而母系统执行只需2秒多,差距有点儿太大。

# virsh edit vm_name
<domain type='kvm'>
......
<qemu:commandline>
<qemu:arg value='-cpu'/>
<qemu:arg value='host'/>
</qemu:commandline>
</domain>

一般建议使用 virsh edit 编辑虚拟机配置文件,避免文件被破坏。

libvirt与qemu 几个常用命令

克隆一个虚拟机:

virt-clone -o formdomain -n todomain -f /path/filename.img

转换镜像格式:

qemu-img convert -O qcow2 filename.img filename.qcow2

支持的格式:raw、qcow、qcow2、vmdk、vdi

查看一个镜像的信息:

qcmu-img info filename.img

调整镜像大小

qemu-img resize filename.img +|-size