0%


作者: 耗子007


配置代理

1
2
3
git config –global http.proxy http://name:password@proxyhk.huawei.com:8080

git config –global https.proxy http://name:password@proxyhk.huawei.com:8080

比如这种错误的时候fatal: unable to access ‘https://github.com/kubernetes/kubernetes.git/’: server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

1
2
3
git config –global http.sslverify false (解决证书验证问题)

git config –global https.sslverify false

注:不过这样并没有解决你证书的问题,只是跳过了而已。

Ubuntu在clone大的项目异常

可能会出下面的错误:

1
2
error: gnutls_handshake() failed: A TLS packet with unexpected length was received. while accessing …
fatal: HTTP request failed

这就需要你自己重新编译安装git了。

1
2
3
4
5
6
7
sudo apt-get install build-essential fakeroot dpkg-dev libcurl4-openssl-dev
sudo apt-get build-dep git
mkdir ~/git-openssl
cd ~/git-openssl
apt-get source git
dpkg-source -x git_1.7.9.5-1.dsc
cd git-1.7.9.5

修改“debian/control”文件,把所有的“libcurl4-gnutls-dev” 替换成“libcurl4-openssl-dev”

1
sudo dpkg-buildpackage -rfakeroot -b

安装对应的版本:

1
2
3
i386: sudo dpkg -i ../git_1.7.9.5-1_i386.deb

x86_64: sudo dpkg -i ../git_1.7.9.5-1_amd64.deb

注:git版本号,注意修改为你下载的对应版本号

参考文章:

http://askubuntu.com/questions/186847/error-gnutls-handshake-failed-when-connecting-to-https-servers/187199#187199


作者: 耗子007


非systemd情况下

直接修改/etc/default/docker文件就行(Ubuntu下service启动docker,属于非systemd模式)

1
2
export http_proxy=xxxxxx
export https_proxy=xxxxxx

systemd模式下

1
2
mkdir /etc/systemd/system/docker.service.d
touch /etc/systemd/system/docker.service.d/http-proxy.conf

添加

1
[Service] Environment=”HTTP_PROXY=http://proxy.example.com:80/”

或者

1
Environment=”HTTP_PROXY=http://proxy.example.com:80/” “NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com”

刷新配置:sudo systemctl daemon-reload

验证配置是否成功:systemctl show –property=Environment docker

重启docker服务:sudo systemctl restart docker

参考文章

https://docs.docker.com/engine/admin/systemd/

http://www.jianshu.com/p/2e0c9ed5433d


作者: 耗子007


先用virsh net-list获取虚拟机的网络列表

1
2
3
4
[root@localhost vms]# virsh net-list
Name State Autostart Persistent
———————————————————-
default active yes yes

然后获取IP的分配列表

1
2
3
4
5
6
[root@localhost vms]# virsh net-dhcp-leases default
Expiry Time MAC address Protocol IP address Hostname Client ID or DUID
——————————————————————————————————————-
2016-09-22 21:08:03 52:54:00:00:00:12 ipv4 192.168.122.7/24 rtos –
2016-09-22 21:08:23 52:54:00:00:00:42 ipv4 192.168.122.226/24 rtos –
2016-09-22 21:08:35 52:54:00:00:00:62 ipv4 192.168.122.5/24 rtos –

获取虚拟机的列表

[root@localhost vms]# virsh list
Id Name State
—————————————————-
12 main running
13 slaver1 running
14 slaver2 running

注:virsh net-dhcp-leases 网络名:会把该网络上分配出去的IP地址显示出来

获取制定虚拟机的IP

virsh edit vmID可以看到虚拟机的MAC地址,然后到第二步中找到对应的IP。

如果有更好的办法可以联系我:duguhaotian@gmail.com


作者: 耗子007


需要的材料

qemu-kvm

能运行的qemu虚拟机镜像文件(如果你的机器是远端服务器,没办法使用virt-view等图形界面的话)
已有的qemu系统镜像安装了openssh-server端
安装qemu相关软件

1
yum install qemu-kvm qemu-img virt-manager libvirt libvirt-python libvirt-client virt-install virt-viewer

准备可用的qemu虚拟机镜像文件
条件:有一台PC机器,安装好了qemu

新建磁盘文件

1
qemu-img create -f qcow2 /root/my.qcow2 20G

安装虚拟机

1
virt-install -r 1024 –accelerate -n test -f /root/my.qcow2 –cdrom mini.iso –graphics=vnc,listen=0.0.0.0

注:mini.iso是ubuntu的最小安装盘,你可以用其他的代替

图形界面正常的安装流程

然后进入虚拟机安装openssh-server端,打开root的ssh登录权限。

此时,我们安装的虚拟机系统的所有文件都在/root/my.qcow2里面。所以,我们把它拷贝到你的centos上面,然后可以直接用这个镜像文件创建虚拟机了。

启动虚拟机的xml配置文件示例

把自己的配置写到test.xml文件,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<domain type=’kvm’>
<name>test</name>
<memory unit=’MiB’>1024</memory>
<currentMemory unit=’MiB’>1024</currentMemory>
<vcpu placement=’static’>1</vcpu>
<os>
<type arch=’x86_64′ machine=’pc’>hvm</type>
<boot dev=’cdrom’/>
<boot dev=’hd’/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset=’utc’/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type=’file’ device=’disk’>
<driver name=’qemu’ type=’qcow2’/>
<source file=’/root/guest.qcow2’/>
<target dev=’vda’ bus=’virtio’/>
</disk>
<controller type=’usb’ index=’0′>
</controller>
<interface type=’network’>
<mac address=’52:54:00:00:00:12’/>
<source network=’default’/>
<model type=’virtio’/>
</interface>
<serial type=’pty’>
<target port=’0’/>
</serial>
<console type=’pty’>
<target type=’serial’ port=’0’/>
</console>
<channel type=’spicevmc’>
<target type=’virtio’ name=’com.redhat.spice.0’/>
</channel>
<input type=’tablet’ bus=’usb’/>
<input type=’mouse’ bus=’ps2’/>
<input type=’keyboard’ bus=’ps2’/>
<graphics type=’spice’ autoport=’yes’/>
<sound model=’ich6′>
</sound>
<video>
<model type=’qxl’ vram=’9216′ heads=’1’/>
</video>
<redirdev bus=’usb’ type=’spicevmc’>
</redirdev>
<memballoon model=’virtio’>
</memballoon>
</devices>
</domain>

注:/usr/libexec/qemu-kvm 其他系统的位置不一样(如,ubuntu是在/user/bin/qemu-system-x86_64)

然后直接运行virsh create test.xml,此时你就可以通过ssh root@ip到你的虚拟机上了。


作者: 耗子007


安装TCL

下载地址:http://www.tcl.tk/software/tcltk/download.html

目前最新版本: tcl8.5.19-src.tar.gz

1
2
3
4
5
6
7
8
9
10
11
wget http://prdownloads.sourceforge.net/tcl/tcl8.5.19-src.tar.gz

tar zxf tcl8.5.19-src.tar.gz

cd tcl8.5.19/unix/

./configure

make

make install

安装expect

expect 官网:http://expect.sourceforge.net/

1
2
3
4
5
6
7
8
9
10
11
12
13
wget http://nchc.dl.sourceforge.net/project/expect/Expect/5.45/expect5.45.tar.gz

tar zxf expect5.45.tar.gz

cd expect5.45

./configure –with-tcl=/usr/local/lib/ –with-tclinclude=../tcl8.5.19/generic/

make

make install

ln -s /usr/local/bin/expect /usr/bin/expect


作者: 耗子007


示例

以获取容器ID为例

1
2
3
4
5
6
7
8
9
10
11
func GetContainerID() (string, error) {
cmd := exec.Command(“/bin/bash”, “-c”, “cat /proc/self/cgroup | grep docker | grep -o -E ‘[0-9a-f]{64}’| head -n 1”)
var out bytes.Buffer

cmd.Stdout = &out
err := cmd.Run()
if err != nil {
return “”, err
}
return out.String(), nil
}

注:cmd.Stdout=&out把脚本执行结果重定向到指定的地方。

参考文章

http://c2pblog.sinaapp.com/archives/219


作者: 耗子007


可以通过进程自己的cgroup的信息获取,cgroup中包含了docker容器的完整ID。在容器中运行cat /proc/self/cgroup得到如下结果:

1
2
3
4
5
6
7
8
9
10
11
12
root@60dc9bc55a76:/home# cat /proc/self/cgroup
11:devices:/docker/60dc9bc55a76c81847d502d8ed432f03c6de131a85653c7a27dbe7db25b5945a
10:cpu,cpuacct:/docker/60dc9bc55a76c81847d502d8ed432f03c6de131a85653c7a27dbe7db25b5945a
9:blkio:/docker/60dc9bc55a76c81847d502d8ed432f03c6de131a85653c7a27dbe7db25b5945a
8:cpuset:/docker/60dc9bc55a76c81847d502d8ed432f03c6de131a85653c7a27dbe7db25b5945a
7:freezer:/docker/60dc9bc55a76c81847d502d8ed432f03c6de131a85653c7a27dbe7db25b5945a
6:hugetlb:/docker/60dc9bc55a76c81847d502d8ed432f03c6de131a85653c7a27dbe7db25b5945a
5:net_cls,net_prio:/docker/60dc9bc55a76c81847d502d8ed432f03c6de131a85653c7a27dbe7db25b5945a
4:memory:/docker/60dc9bc55a76c81847d502d8ed432f03c6de131a85653c7a27dbe7db25b5945a
3:pids:/docker/60dc9bc55a76c81847d502d8ed432f03c6de131a85653c7a27dbe7db25b5945a
2:perf_event:/docker/60dc9bc55a76c81847d502d8ed432f03c6de131a85653c7a27dbe7db25b5945a
1:name=systemd:/docker/60dc9bc55a76c81847d502d8ed432f03c6de131a85653c7a27dbe7db25b5945a

可以通过下面的命令,提前出来docker容器ID:

1
cat /proc/self/cgroup | grep docker | grep -o -E ‘[0-9a-f]{64}’ | head -n 1

参考链接:https://github.com/docker/docker/issues/19698


作者: 耗子007


Linux支持如下的namespaces:

1
2
3
4
5
6
7
8
9
Namespace                            Constant                                               Isolates

Cgroup CLONE_NEWCGROUP Cgroup root directory
IPC CLONE_NEWIPC System V IPC, POSIX message queues
Network CLONE_NEWNET Network devices, stacks, ports, etc.
Mount CLONE_NEWNS Mount points
PID CLONE_NEWPID Process IDs
User CLONE_NEWUSER User and group IDs
UTS CLONE_NEWUTS Hostname and NIS domain name

读取软链接的namespace类型和inode值:

1
2
$ readlink /proc/$$/ns/uts
uts:[4026531838]

参考链接:http://man7.org/linux/man-pages/man7/namespaces.7.html


作者: 耗子007


自定义的Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
FROM centos

ENV http_proxy http://username:password@proxy:8080
ENV https_proxy http://username:password@proxy:8080

#RUN echo “http_proxy=http://username:password@proxy:8080” >> /etc/apt/apt.conf
#RUN echo “https_proxy=http://username:password@proxy:8080” >> /etc/apt/apt.conf

RUN touch /etc/wgetrc
RUN echo “http_proxy=http://username:password@proxy:8080” >> /etc/wgetrc
RUN echo “https_proxy=http://username:password@proxy:8080” >> /etc/wgetrc
RUN source /etc/wgetrc

RUN yum -y update
RUN yum -y install httpd httpd-devel zip unzip tar wget
RUN yum -y install php php-xml php-pdo php-gd php-mbstring sqlite sqlite-devel

RUN wget –no-check-certificate https://wordpress.org/latest.tar.gz(中文版链接:https://cn.wordpress.org/wordpress-4.5.3-zh_CN.tar.gz)
RUN wget –no-check-certificate https://downloads.wordpress.org/plugin/sqlite-integration.1.8.1.zip
RUN tar xvfz ./latest.tar.gz
RUN unzip ./sqlite-integration.1.8.1.zip
RUN rm -f ./latest.tar.gz
RUN rm -f ./sqlite-integration.1.8.1.zip
RUN mv wordpress /var/lib/wordpress
RUN chown -R apache.apache /var/lib/wordpress
RUN mv /var/lib/wordpress/wp-config-sample.php /var/lib/wordpress/wp-config.php
RUN mv sqlite-integration /var/lib/wordpress/wp-content/plugins/
RUN mv /var/lib/wordpress/wp-content/plugins/sqlite-integration/db.php \
/var/lib/wordpress/wp-content/

RUN echo “yes n | cp -ripf /var/lib/wordpress/* /var/www/html/ > /dev/null 2>&1” >> /root/.bash_profile
VOLUME /var/www/html

RUN systemctl enable httpd

EXPOSE 80

#docker run –privileged -itd -p 8080:80 -v /root/wordpress/public_html:/var/www/html wordpress_sqlite bash -l -c “/sbin/init”

然后构建docker镜像,执行命令:docker build –tag wordpress_sqlite .

现在新建wordpress的在host上的文件目录,如:/home/rtos/workspace/wordpress/public_html/

启动wordpress服务,执行如下命令:

1
2
3
docker run –privileged -itd -p 8080:80 -v /home/rtos/workspace/wordpress/public_html/:/var/www/html wordpress_sqlite bash -l -c “sbin/init”

等待几分钟,访问http://localhost:8080,或者http://ip:8080

注意:

  • 我们的博客数据是放到SQLite数据库 (/var/www/html/wp-content/database/.ht.sqlite文件)
  • 而网站的所有程序是放到(目录/var/www/html)
  • 关于如何备份数据以及迁移博客,后续分析。


作者: 耗子007


拉取官方镜像

1
2
docker pull wordpress:latest
docker pull mysql:latest

启动mysql容器服务

1
2
3
4
5
docker run –name mysqlwp -e MYSQL_ROOT_PASSWORD=dockerRootMySQL \
-e MYSQL_DATABASE=wordpress \
-e MYSQL_USER=wordpress \
-e MYSQL_PASSWORD=wordpresspwd \
-d mysql

启动wordpress容器服务

1
2
3
4
5
docker run –name wordpress –link mysqlwp:mysql -p 8080:80 \
-e WORDPRESS_DB_NAME=wordpress \
-e WORDPRESS_DB_USER=wordpress \
-e WORDPRESS_DB_PASSWORD=wordpresspwd \
-d wordpress

注意:官方的安装方式,博客书籍到保存到MySQL数据库里,而我们的MySQL是放到容器里面了。怎么回去书籍,后续研究。

优点:构建方便、快捷

缺点:第一,两个容器大概需要800MB的存储空间;第二,需要启动二个容器