示例build.gradle
文件如下。
1 | buildscript { |
示例build.gradle
文件如下。
1 | buildscript { |
1.搭建ldap服务器
在终端输入下面的命令:
1 | sunny@server1:~$ sudo apt-get install slapd ldap-utils |
填入相应的信息。如果相重新填写执行sudo dpkg-reconfigure slapd
安装管理工具:
1 | sunny@server1:~$ sudo apt-get install phpldapadmin |
修改配置文件
1 | sunny@server1:~$ sudo vim /etc/phpldapadmin/config.php |
在$servers->setValue('server','base',array('dc=example,dc=com'));
以及$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');
位置将dc=example,dc=com
修改为上面配置slapd时填入的域名。
登入管理页面http://localhost/phpldapadmin
创建People和group对象,并建立群组和用户实例。
2.ldap认证登陆
1 | sunny@server2:~$ sudo apt-get install ldap-auth-client nscd |
1 | LDAP server Uniform Resource Identifier: ldap://LDAP-server-IP-Address |
如果想重新配置执行sunny@server2:~$ sudo dpkg-reconfigure ldap-auth-config
编辑文件nsswitch.conf
1 | sudo vim /etc/nsswitch.conf |
1 | passwd: files ldap |
上面三部分需要包含ldap
编辑文件
1 | sunny@server2:~$ sudo vim /etc/pam.d/common-session |
在行尾填入如下内容:
1 | session required pam_mkhomedir.so skel=/etc/skel umask=0022 |
重启服务:
1 | sudo /etc/init.d/nscd restart |
这样这台服务器就可以通过server1的ldap中配置的用户登陆了。
在这个教程里,我会介绍怎样搭建一个本地Android源码Gerrit服务器。
完成这个教程后,你会拥有一个完全可运行的AOSP镜像和本地Gerrit服务器。
首先我们需要一个Linux服务器。这里用Ubuntu 14.04
Gerrit 需求:
1.Java JDK > 1.7
2.Git
3.SSH server
4.DB
我选择mysql作为数据库服务,当然你也可以用其他的数据库软件。可以参考Gerrit文档
这里有一句命令可以让你得到你所需要的一切。
1 | $ sudo apt-get install git openjdk-8-jdk openssh-server mysql-server gitweb |
下载并安装Android repo
1 | $ sudo curl https://storage.googleapis.com/git-repo-downloads/repo > /usr/bin/repo |
现在我们需要设置一个本地Android镜像,这需要一段时间,你可以先去喝杯咖啡。
1 | $ mkdir -p /usr/local/aosp/mirror |
下载Gerrit
创建一个Gerrit用户
1 | $ sudo adduser --system --shell /bin/bash --gecos 'Gerrit Code Review User' --group --disabled-password --home /home/gerrit2 gerrit2 |
Gerrit需要一个数据库来工作,这里用的是mysql。打开终端输入以下命令:
1 | $ mysql -u root -p |
上面这个命令在mysql中创建了一个gerrit用户,一个数据库和gerrit用户需要的权限集合。
用新的系统用户登陆:
1 | $ sudo su gerrit2 |
复制上面下载的文件gerrit-2.13.5.war
到gerrit2的home下,然后执行下面的命令:
1 | $ java -jar ./gerrit-2.11.war init -d review_site |
1 | Using secure store: com.google.gerrit.server.securestore.DefaultSecureStore |
现在Gerrit已经开始运行了。
需要注意的是,第一个登陆到gerrit的用户将会成为管理员。
Gerrit能通过多种认证方式登陆。上面选择的OpenID。
现在让我们打开浏览器并打开Gerrit网站。
注册并登陆后需要设置SSH keys,这样我们就能够在命令行下工作。
下面我们在Ubuntu系统的另一个用户下执行以下命令:
1 | $ ssh-keygen <ENTER> |
在网站的右上角点击你的用户名然后点击Settings,在左侧的菜单中选择“SSH Public Keys”,复制上面的内容到里面,然后点Add。
下面让我们测试一下通过SSH访问Gerrit:
1 | ssh -p 29418 admin@localhost <ENTER> <Change "admin" to your username in gerrit> |
出现以上信息说明登陆成功,下面创建两个group:“android-admin” and “android”
前者用来管理,包含review,merge,delete等权限,后者只有view和change-set的权限。
在网页中点击People -> Create New Group,输入名称“android-admin”。执行同样的操作创建“android”。
现在我们为AOSP代码树创建一个父项目。所有为这个项目的设置都会继承到子项目。如果跳过这步,AOSP项目会继承“All-Projects”项目,而这个项目太通用了。
在网站中点击Project -> Create New Project,填入以下内容:
1 | Project Name: Android |
勾选 “Only Serve As Parent For Other Projects”,然后点击“Create Project”按钮。
项目已经创建完,下面来为这个项目设置权限控制:
点击Projects -> List,然后选择“Android”项目,点击“Access”然后点击“Edit”,修改成如下图。图中还包含了其他的群组,可自行设置。
现在我们可以把所有的Android项目推送到Gerrit了。
第一条命令会在Gerrit上创建所有的Android项目;第二条命令会将刚刚创建的项目的父项目修改为“Android”;第三条命令会将代码推送到Gerrit,时间会比较长。
进入下载Android镜像的目录执行以下命令:
1 | $ repo forall -c 'echo $REPO_PATH; ssh -p 29418 admin@localhost gerrit create-project --name android/$REPO_PATH --owner android;' |
大功告成!
创建Gerrit服务自启:
1 | $ sudo echo "GERRIT_SITE=/opt/gerrit-review" >> /etc/default/gerritcodereview |
下面贴一个gerrit配置文件(postgre数据库,ldap认证,提交信息增加jira链接)
1 | [gerrit] |
$ sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils
$ sudo adduser `id -un` libvirtd
$ virsh -c qemu:///system list
1 | $ sudo ls -la /var/run/libvirt/libvirt-sock |
$ sudo vi /etc/network/interfaces
1 | auto br0 |
ifconfig
再查看网卡的设置,这个时候 eth0 已经没有具体的IP地址,IP地址出在了 br0 的虚拟网上面。/etc/libvirt/qemu/
1 | virsh list --all > 查看虚拟机状态 |
注:virsh 命令丰富,可以执行各种维护任务。
上传系统 iso 文件到 /file/tools/win/win2003/WIN_2003_SP2.iso
开始安装
1 | $ virt-install --name=win2003sp2 \ |
参数说明:
1 | --name 指定虚拟机名称 |
将虚拟机的启动方式改为从磁盘启动$ virsh edit win2003sp3
将 <boot dev='cdrom'/>
改为 <boot dev='hd'/>
然后重新启动虚拟机:$virsh destroy win2003sp3
$virsh start win2003sp3
之后就可以重新使用 vnc 连接,继续安装过程。
4. 安装完毕后按需要设置IP地址、远程连接等即可
复制已经安装好的虚拟机为另一个全新的虚拟机。如要将上面的 win2003sp2 复制为 win2003sp2-2:
$virsh shutdown win2003sp2
$virt-clone -o win2003sp2 -n win2003sp2-2 -f /file/kvm/win2003sp2/win2003sp2-2.img
$virsh edit win2003sp2-2
<graphics type='vnc' port='5912' autoport='no' listen='0.0.0.0'>
$virsh start win2003sp2-2
对虚拟机做快照,防止损坏了可以正常恢复。kvm 快照分两种:
第1种:lvm 快照,如果分区是 lvm,可以利用 lvm 进行 kvm 的快照备份
第2种:由于 raw 格式不支持镜像,所以需要将格式转换为 qcow2 才可以创建快照。
第2种具体操作如下:
kvm 虚拟机默认使用 raw 格式的镜像格式,性能最好,速度最快,它的缺点就是不支持一些新的功能,如镜像、zlib 磁盘压缩、AES加密等。
要使用镜像功能,磁盘格式必须为 qcow2。
下面开始 kvm 虚拟机快照备份的过程:
$qemu-img info win2003sp2.img
$virsh shutdown win2003sp2
$qemu-img convert -f raw -O qcow2 win2003sp2.img win2003sp2.img.qcow2
-f 源镜像的格式
-O 目标镜像的格式
4. 修改虚拟机配置文件,指向新的磁盘格式文件$virsh edit win2003sp2
1 | <devices> |
注:转换后镜像文件占用的空间大大减少了,而且日后为动态自动增加,而不是固定占用开始设置时占用的大小。
5. 创建快照$virsh snapshot-create-as win2003sp2 clean
6. 查看虚拟机镜像快照的版本$virsh snapshot-list win2003sp2
7. 看当前最新的快照版本$virsh snapshot-current win2003sp2
8. 恢复虚拟机快照
恢复虚拟机快照前必须先关闭虚拟机!$virsh snapshot-revert win2003sp2 clean
9. 删除虚拟机快照$virsh snapshot-delete win2003sp2 clean
adb forward tcp:6666 localabstract:/adb-hub; adb connect 127.0.0.1:6666
千万不能把时间浪费在睡觉上。 要有一个良好的作息时间,每天拿出时间来钻研技术,多浏览网上的信息,多去搜索不知道的问题,有能力最好每天背英语单词。
Java基础比较重要,一定要熟知,Android 开发者网站上有好多内容,要适应着去读英文资料。 可以尝试着去阅读一下Android原生应用的源码。新入门建议读郭霖的《第一行代码》 repo下载 下载源可以用清华的,不用翻墙.
英语很重要,翻墙很重要 开始工作都会有一个疲惫期,什么都不想干,只想着辞职,这个时候我的处理方式是请几天假,让自己休息一下,仔细考虑清除跳槽的利弊。 平时注重锻炼,身体和眼睛。
欢迎关注我的博客https://darkerthanblack.org 学叔 2015.05.23
终于算是过年了,不知从何时起对烟花爆竹失去了兴趣。每次过年都是在看别人热闹。每次都早早的睡了,这一次不仅早早的睡了,而且12点的烟花爆竹声都没能叫醒我。过年似乎真的跟我没关系了,只是一个平常的夜晚。
一眨眼竟然就已经到了谈婚论嫁的年纪。一下子不知所措了。
操作系统 ubuntu 12.04 内核3.16.5-x86_64 Openswan U2.6.37 xl2tpd version: xl2tpd-1.3.1
1.安装pptpd [code]apt-get install pptpd[/code] 2.配置文件 [code]vim /etc/ppp/options.pptpd[/code] 填写如下内容
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
lock
nobsdcomp
novj
novjccomp
nologfd
idle 2592000
ms-dns 8.8.8.8
ms-dns 8.8.4.4
说明:
name pptpd : pptpd server 的名称。
refuse-pap : 拒绝 pap 身份验证模式。
refuse-chap : 拒绝 chap 身份验证模式。
refuse-mschap : 拒绝 mschap 身份验证模式。
require-mschap-v2 : 在端点进行连接握手时需要使用微软的 mschap-v2 进行自身验证。
require-mppe-128 : MPPE 模块使用 128 位加密。
ms-dns 8.8.8.8
ms-dns 8.8.4.4 : ppp 为 Windows 客户端提供 DNS 服务器 IP 地址,第一个 ms-dns 为 DNS Master,第二个为 DNS Slave。
proxyarp : 建立 ARP 代理键值。
debug : 开启调试模式,相关信息同样记录在 /var/logs/message 中。
lock : 锁定客户端 PTY 设备文件。
nobsdcomp : 禁用 BSD 压缩模式。
novj
novjccomp : 禁用 Van Jacobson 压缩模式。
nologfd : 禁止将错误信息记录到标准错误输出设备(stderr)。
[code]vim /etc/ppp/chap-secrets[/code] 输入以下内容
myusername pptpd mypassword *
[code]vim /etc/pptpd.conf[/code] 填入以下内容
option /etc/ppp/options.pptpd
logwtmp
localip 10.82.18.1
remoteip 10.82.18.2-254
[code] sed -i ‘s/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g’ /etc/sysctl.conf sysctl -p [/code]
1.安装openswan和xl2tpd [code]apt-get install openswan xl2tpd [/code] 安装过程中选择使用X.509,创建,自签名 2.配置文件 [code]vim /etc/ipsec.conf[/code] 填入以下内容
version 2.0
config setup
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
oe=off
protostack=netkey
conn L2TP-PSK-NAT
dpddelay=40
dpdtimeout=130
dpdaction=clear
rightsubnet=vhost:%priv
also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
ikelifetime=8h
keylife=1h
type=transport
left=106.186.178.35
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
[code]vim /etc/ipsec.secrets [/code]
YOUR.IP %any: PSK "password"
[code]vim /etc/xl2tpd/xl2tpd.conf[/code]
[global]
ipsec saref = yes
[lns default]
ip range = 10.1.2.2-10.1.2.255
local ip = 10.1.2.1
refuse chap = yes
refuse pap = yes
require authentication = yes
name xl2tpd
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
[code]vim /etc/ppp/options.xl2tpd [/code]
require-mschap-v2
ms-dns 8.8.8.8
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
name xl2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4
[code]vim /etc/ppp/chap-secrets [/code]
按说明填写,server写xl2tpd
[code]vim /etc/rc.local[/code]
iptables --table nat --append POSTROUTING --jump MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
exit 0
[code] service ipsec restart service xl2tpd restart [/code]