月度归档:2016年09月

彩信网关MMS/MM7模拟器

MMS/MM7模拟器主要是模拟使用MM7协议的彩信网关。此类型彩信网关使用基于SOAP协议的通讯模式。

模拟器要求使用JDK1.4以上的Java运行环境,请确认相关环境已经安装妥当。如果还没有安装Java环境,请访问java.sun.com下载最新J2SE的SDK。

此模拟器已经使用了全新的核心设计,主要针对应用程序的稳定性、可靠性、效率以及配置、管理和监控方面做了很大的调整。基本界面风格和应用功能上没什么变化。

模拟器的安装

模拟器整个是一个压缩包。点击链接下载模拟器:标准MM7模拟器联通MM7模拟器真脉无线MM7模拟器上海贝尔MM7模拟器亚信MM7模拟器

联通MM7网关、真脉无线MM7网关、上海贝尔MM7网关和移动的MM7网关基本一致,但是都存在少部分差别。例如:字段上的使用方式;XML文件的描述方式等等。亚信MM7网关完全属于自定义协议,只不过使用类似MM7的字段命名和API封装方式。

目前模拟器的缺省配置仅使用短链接的方式处理相关协议包,如果需要进行长链接测试则需要调整模拟器配置。有关模拟器可能出现的各种问题请参考“模拟器相关问题”。

解包以后应该可以看到目录结构。其中bin目录是存放运行程序包的目录;MM7Simulator目录存放配置文件(config.xml)、启动命令(startup.bat/startup.sh)和关闭命令(shutdown.bat/shutdown.sh)。

如果解开后没有发现相关的的启动命令和关闭命令文件,请点击这里下载:startup.batstartup.shshutdown.batshutdown.sh

目录

Bat文件是windows环境下使用的启动和关闭命令;Shell文件是Unix系统下使用的启动和关闭命令。下面主要以Windows环境进行讲解,Unix下基本类似。

如果Java运行环境安装正确,则可以直接运行和关闭,无需安装其他软件或者运行包。

启动模拟器

启动模拟器只需要运行startup.bat即可。

正常启动后,会出现一个Console窗口,最后会提示:“SimulatorCenter.main : system startup !”

关闭模拟器

关闭模拟器只需要输入quit命令即可,或者运行shutdown.bat。

正常关闭后,Console窗口中应该最后会提示:“TaskManager.uninitialize : process manager was uninitialized !”

模拟器的使用

模拟器启动以后使用缺省配置端口8088和8089进行通讯。

缺省配置的企业代码是:888888;特别服务号码(也称长号码)是10658888;用户名是zxme;密码是zxme。

这些配置可以在config.xml中找到:

        <!-- These are all authentications of gateway. -->
         <authenticate name="whoami" role="authorized">
             <enterprise_code>888888</enterprise_code>
             <service_code>10658888</service_code>
             <version>6.3.0</version>
             <server_id>927001</server_id>
                 <url>/vas</url>
             <account>zxme</account>
             <password>zxme</password>
         </authenticate>

启动后,会在系统目录中多出几个工作目录。日志文件在目录webpages目录下。

工作目录

在系统运行过程中,请勿删除工作目录;在系统关闭后,可以根据需要删除工作目录。如果需要完全重置模拟器的工作状态,则必须完全删除相关工作目录。

1.建立Socket连接与登陆

使用自己的MM7客户端程序,在8089端口等待链接,并与8088端口建立Socket连接。然后按照MM7协议发送数据包。模拟器会按照协议处理相关连接过程。

对于亚信MM7网关的接收和发送,都必须与8088端口建立Socket连接。然后按照亚信的自定义协议发送和接收数据报。模拟器会按照亚信的自定义协议处理相关连接过程。

2.发送彩信

正确建立连接以后,可以按照MM7协议的SubmitReq过程提交相关数据并得到应答。模拟器在接收到数据以后,会进行解析并按照协议要求进行应答和回复。相关的处理信息会记录在日志文件中。

3.接收彩信

客户端应该在8089端口建立侦听端口,并等待模拟器发起链接。模拟器正确建立连接以后,在该连接上等待模拟器的DeliverReq数据包即可,并且要求客户端按照协议给予应答。模拟器会对相关过程记录在日志信息当中。

4.模拟MT以及状态报告过程

发送SubmitReq时,请将DeliveryReport设置为true即可。

模拟器收到相关数据包以后,会通过SubmitReqResponse应答给出messageID;随后模拟出DeliverReportReq数据包给出状态报告。

5.模拟MO过程

发送SubmitReq时,请将DeliveryReport设置为false即可。

模拟器收到相关数据包以后,会通过DeliverReq请求发送模拟的MO。其中DeliverReq的相关数据全部来自接收到的SubmitReq数据。包括来源号码、目标号码、业务代码以及信息内容。

6.模拟压力测试

如果需要进行模拟的完整压力测试过程,只需要以最大速度重复步骤5即可。

模拟器的监控

模拟器有一个基于Web监控后台,系统启动的时候同时启动。缺省端口建立在8081上。监控的URL地址、用户名和密码可以在配置文件中找到。

         <authenticate name="admin" role="administrator">
               <url>http://localhost:8081</url>
               <account>forest_luo</account>
               <password>root</password>
          </authenticate>
          <service port="8081">
               <application docBase="/webpages" id="admin" mapping="/admin"/>
          </service>

1.登陆监控页面

打开IE浏览器输入URL地址,然后输入用户名和密码即可访问(Firefox不支持iframe,不建议使用)。

登录页面

2.系统根目录区

系统根目录区提示当前的网关标识以及系统若干元素的组成结构。

根目录

点击相关图标即可展开各个部分。

3.观察网关状态

点击Gateway链接,则在左边会出现一些功能提示。

返回首页 | 网关状态 | 流量报告

请点击“网关状态”,则页面跳至一个定时(间隔5秒)刷新的状态:

网关状态

由于相关参数众多,这里只告诉几个比较常用的检查参数。

      (1) server mm7 …… T : yes R : no
       此行的T和R表示连接情况。其中T代表发送;R代表接收。No表示尚未建立连接;Yes表示连接进入准备状态或者已经建立链接。
      (2) tQueue……0
       此行的最后一个参数表示通过tQueue的数据包总数,也就是发送数据包的总数。
      (3) rQueue……0
       此行的最后一个参数表示通过rQueue的数据包总数,也就是接收数据包的总数。
      (4) transmit……CF0
       此行的最后一个参数表示数据包发送的当前速度。单位是“个/秒”。
      (5) receiver……CF0
       此行的最后一个参数表示数据包接收的当前速度。单位是“个/秒”。

例如:项目(1)可以查看连接情况;一般执行步骤4的时候,项目(2)和项目(3)的总数相等;项目(4)和项目(5)表明数据收发的速度。模拟器内部连接互测试的时候,这个数值可以达到70以上。

模拟器的常见问题

1.模拟器能同时启动两个么?

可以同时启动多个模拟器,但是不能在同一个目录下运行。因为由于MO端口监听方面的冲突,因此需要修改配置文件。

2.缺省端口在配置文件哪个部分?

缺省端口配置在这个部分:

        <socket timeout="5">
             <local port="8088"/>
         </socket>

修改配置后,需要重新启动模拟器才可以生效。

3.登陆的相关参数在配置文件哪个部分?

登陆的相关参数在这个部分:

        <!-- These are all authentications of gateway. -->
         <authenticate name="whoami" role="authorized">
             <enterprise_code>888888</enterprise_code>
             <service_code>10658888</service_code>
             <version>6.3.0</version>
             <server_id>927001</server_id>
                 <url>/vas</url>
             <account>zxme</account>
             <password>zxme</password>
         </authenticate>

4.登陆后台的参数在配置文件哪个部分?

登陆后台的相关参数在这个部分:

         <authenticate name="admin" role="administrator">
              <url>http://localhost:8081</url>
              <account>forest_luo</account>
              <password>root</password>
          </authenticate>
          <service port="8081">
              <application docBase="/webpages" id="admin" mapping="/admin"/>
          </service>

5.如何允许建立更多的连接?

连接个数的配置在这个部分:

<session type="client.receiver" async="true" count="1">
......
<session type="server.transmitter" async="true" count="1">

将属性count修改为大于1的数值即可。

6.如何控制链接中数据包的处理速度?

由于HTTP协议是短链接,目前这个速度不能直接通过设置session的flux来控制。一般情况下是通过控制最多连接个数来限定。

7.后台监控端口已经被占用,如何调整?

调整监控端口需要两个步骤。

  • (1) 先调整服务器端口。属性port指明了服务器端口配置,可以调整为其他数值。
<service port="8081">
  • (2) 相应的url也必须进行修改:
<url>http://localhost:8081</url>

修改后,系统必须重新启动才可以生效。

8.如何发送特定的上行和状态报告?

点击Gateway链接,则在右边会出现一些功能提示。

发送下行 | 模拟上行 | 状态报告 | 模拟回执

对于模拟器端,可以正确执行的指令只有“模拟上行”和“状态报告”。

  • (1) 点击“模拟上行”,按照下面的方式进行填写:

模拟上行

根据自己的测试需要可以选择各种测试项目。可测试的内容包括:文字、图片和铃声。以及三者的各种混合模式。点击“发送”,系统即开始执行相关模拟特定上行的功能。

*(2) 点击“状态报告”,按照下面的方式进行填写:

状态报告

根据自己的测试需要可以选择各种测试项目。可以测试成功、过期、流量控制错等状态。点击“发送”,系统即开始执行相关模拟特定状态报告的功能。

搭建docker内网私服

主要思路:
docker-registry-deploy

1. Docker Registry 说明

关于如何创建和使用本地仓库,其实已经有很多文章介绍了。因为docker技术正处于发展和完善阶段,所以有些文章要么内容已经过时,要么给出了错误的配置,导致无法正常创建仓库。本文记录的是个人完整的搭建过程,docker version为1.1.2。

官方提供了Docker Hub网站来作为一个公开的集中仓库。然而,本地访问Docker Hub速度往往很慢,并且很多时候我们需要一个本地的私有仓库只供网内使用。

Docker仓库实际上提供两方面的功能,一个是镜像管理,一个是认证。前者主要由docker-registry项目来实现,通过http服务来上传下载;后者可以通过docker-index(闭源)项目或者利用现成认证方案(如nginx)实现http请求管理。

docker-registry既然也是软件应用,自然最简单的方法就是使用官方提供的已经部署好的镜像registry。官方文档中也给出了建议,直接运行sudo docker run -p 5000:5000 registry命令。这样确实能启动一个registry服务器,但是所有上传的镜像其实都是由docker容器管理,放在了/var/lib/docker/….某个目录下。而且一旦删除容器,镜像也会被删除。因此,我们需要想办法告诉docker容器镜像应该存放在哪里。registry镜像中启动后镜像默认位置是/tmp/registry,因此直接映射这个位置即可,比如到本机的/opt/data/registry目录下。

 

2. 在CentOS上搭建docker私服

2.1 安装docker-registry

方法有多种,直接运行下面的命令:

1
# docker run -d -e SETTINGS_FLAVOR=dev -e STORAGE_PATH=/tmp/registry -v /opt/data/registry:/tmp/registry -p 5000:5000 registry

如果本地没有拉取过docker-registry,则首次运行会pull registry,运行时会映射路径和端口,以后就可以从/opt/data/registry下找到私有仓库都存在哪些镜像,通过主机的哪个端口可以访问。
你也可以把项目 https://github.com/docker/docker-registry.git 克隆到本地,然后使用Dockerfile来build镜像:

1
2
3
4
5
6
7
8
9
10
11
12
13
# git clone https://github.com/docker/docker-registry.git
# cd docker-registry && mkdir -p /opt/data/registry
# docker build -t "local-sean" .
build完成后,就可以运行这个docker-registry
我们先配置自己的config.yml文件,第一种方法是直接在run的时候指定变量
# cp config/config_sample.yml /opt/data/registry/config.yml
# vi /opt/data/registry/config.yml
##这里可以设置本地存储SETTINGS_FLAVOR=dev,local STORAGE_PATH:/tmp/registry等待
# docker run -d -v /opt/data/registry:/tmp/registry -p 5000:5000 -e DOCKER_REGISTRY_CONFIG=/tmp/registry/config.yml registry
docker run -d -e SETTINGS_FLAVOR=dev -e STORAGE_PATH=/tmp/registry -v /db/docker-images:/tmp/registry -p 5000:5000 registry

2.2 客户端使用

要从私服上获取镜像或向私服提交镜像,现在变得非常简单,只需要在仓库前面加上私服的地址和端口,形如172.29.88.222:5000/centos6。注意,这里可以选择不使用IP,而是用hostname,如registry.domain.com:5000,但不能仅用不带.的主机名registry,docker会认为registry是用户名,建议使用带域名的hostname加port来表示。

于是在另外一台要使用docker的主机上就可以通过这台私服拉取和推送镜像了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
从私服上搜索存在哪些可用镜像
# curl -X GET http://sean.domain.com:5000/v1/search
{"num_results": 2, "query": "", "results": [{"description": "", "name": "library/centos6"}, {"description": "", "name": "library/nginx"}]}
按条件搜索nginx
# curl -X GET http://sean.domain.com:5000/v1/search?q=centos6
拉取image到本地
docker pull library/centos6
## 本地对份镜像启动起来,形成container
## 给container去另外一个名字
# docker tag 68edf809afe7 registry.domain.com:5000/centos6-test
## 最后将新的docker images推送到私服上
docker push registry.domain.com:5000/centos6-test

第一次push到私服上时会提示用户名、密码和邮箱,创建即可。也可以在docker私服端加入认证机制。

3. 加入nginx认证

(请在实际操作以前,先阅读完本节,再确定是否在前端加入nginx)

3.1 安装及配置nginx

从上面的过程可以看到,除非防火墙限制,否则任何主机可以创建账号并想私服推送镜像,更安全的做法是在外层加入登录认证机制。

1
2
3
4
5
6
7
8
9
10
最好安装1.4.x版本,不然下面的有些配置可能会不兼容
# yum install nginx
创建两个登录用户
# htpasswd -c /etc/nginx/docker-registry.htpasswd sean
New password:
Re-type new password:
Adding password for user sean
# htpasswd /etc/nginx/docker-registry.htpasswd itsection

为了让nginx使用这个密码文件,并且转发8080端口的请求到Docker Registry,新增nginx配置文件
vi /etc/nginx/sites-enabled/docker-registry

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
# For versions of Nginx > 1.3.9 that include chunked transfer encoding support
# Replace with appropriate values where necessary
upstream docker-registry {
server localhost:5000;
}
server {
listen 8080;
server_name sean.domain.com; -- your registry server_name
# ssl on;
# ssl_certificate /etc/ssl/certs/docker-registry;
# ssl_certificate_key /etc/ssl/private/docker-registry;
proxy_set_header Host $http_host; # required for Docker client sake
proxy_set_header X-Real-IP $remote_addr; # pass on real client IP
client_max_body_size 0; # disable any limits to avoid HTTP 413 for large image uploads
# required to avoid HTTP 411: see Issue #1486 (https://github.com/dotcloud/docker/issues/1486)
chunked_transfer_encoding on;
location / {
# let Nginx know about our auth file
auth_basic "Restricted";
auth_basic_user_file docker-registry.htpasswd;
proxy_pass http://docker-registry;
}
location /_ping {
auth_basic off;
proxy_pass http://docker-registry;
}
location /v1/_ping {
auth_basic off;
proxy_pass http://docker-registry;
}
}
1
2
3
4
让nginx来使用这个virtual-host
# ln -s /etc/nginx/sites-enabled/docker-registry /etc/nginx/conf.d/docker-registry.conf
重启nginx来激活虚拟主机的配置
# service nginx restart

3.2 加入认证后使用docker-registry

此时主机的5000端口应该通过防火墙禁止访问(或者在docker run端口映射时只监听回环接口的IP -p 127.0.0.1:5000:5000)。

1
2
# curl localhost:5000
"docker-registry server (dev) (v0.8.1)"

如果直接访问访问将得到未授权的信息:

1
2
3
4
5
6
7
8
# curl localhost:8080
<html>
<head><title>401 Authorization Required</title></head>
<body bgcolor="white">
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx/1.4.7</center>
</body>
</html>

带用户认证的docker-registry:

1
2
3
4
5
6
7
8
9
10
# curl http://sean:sean@sean.domain.com:8080/v1/search
{"num_results": 2, "query": "", "results": [{"description": "", "name": "library/centos6"}, {"description": "", "name": "library/nginx"}]}
# docker login registry.domain.com:8080
Username: sean
Password:
Email: zhouxiao@domain.com
Login Succeeded
# docker pull registry.domain.com:8080/library/centos6

不出意外的话,上面的docker pull会失败:

1
2
3
4
5
6
7
8
9
10
11
12
13
# docker pull registry.domain.com:8080/library/centos6
Pulling repository registry.domain.com:8080/library/centos6
2014/11/11 21:00:25 Could not reach any registry endpoint
# docker push registry.domain.com:8080/ubuntu:sean
The push refers to a repository [registry.domain.com:8080/ubuntu] (len: 1)
Sending image list
Pushing repository registry.domain.com:8080/ubuntu (1 tags)
2014/11/12 08:11:32 HTTP code 401, Docker will not send auth headers over HTTP.
nginx日志
2014/11/12 07:03:49 [error] 14898#0: *193 no user/password was provided for basic
authenticatGET /v1/repositories/library/centos6/tags HTTP/1.1", host: "registry.domain.com:8080"

本文后的第1篇参考文档没有出现这个问题,但评论中有提及。
有人说是backend storage的问题,这里是本地存储镜像,不应该。经过查阅大量资料,并反复操作验证,是docker-registry版本的问题。从v0.10.0开始,docker login虽然Succeeded,但pullpush的时候,~/.dockercfg下的用户登录信息将不允许通过HTTP明文传输。(如果你愿意可以查看v0.10.0的源码 registry.go,在分支v0.9.1及以前是没有HTTP code 401, Docker will not send auth headers over HTTP的
目前的办法三个:

  • 撤退,这就是为什么先说明在操作前线查看到这的原因了
  • 换成v0.9.1及以下版本。现在都v1.3.1了,我猜你不会这么做
  • 修改源码session.go,去掉相应的判断行,然后git下来重新安装。我猜你更不会这么做
  • 安装SSL证书,使用HTTPS传输。这是明智的选择,新版本docker也推荐我们这么做,往下看。

3.3 为nginx安装ssl证书

首先打开nginx配置文件中ssl的三行注释

1
2
3
4
5
6
7
8
9
10
11
# vi /etc/nginx/conf.d/docker-registry.conf
...
server {
listen 8000;
server_name registry.domain.com;
ssl on;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
...

保存之后,nginx会分别从/etc/nginx/ssl/nginx.crt/etc/nginx/ssl/nginx.key读取ssl证书和私钥。如果你自己愿意花钱买一个ssl证书,那就会变得非常简单,把证书和私钥拷贝成上面一样即可。关于SSL以及签署ssl证书,请参考其他文章。
这里我们自签署一个ssl证书,把当前系统作为(私有)证书颁发中心(CA)。

创建存放证书的目录

1
# mkdir /etc/nginx/ssl

确认CA的一些配置文件

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
# vi /etc/pki/tls/openssl.cnf
...
[ CA_default ]
dir = /etc/pki/CA # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt # database index file.
#unique_subject = no # Set to 'no' to allow creation of
# several ctificates with same subject.
new_certs_dir = $dir/newcerts # default place for new certs.
certificate = $dir/cacert.pem # The CA certificate
serial = $dir/serial # The current serial number
crlnumber = $dir/crlnumber # the current crl number
# must be commented out to leave a V1 CRL
crl = $dir/crl.pem # The current CRL
private_key = $dir/private/cakey.pem # The private key
RANDFILE = $dir/private/.rand # private random number file
...
default_days = 3650 # how long to certify for
...
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = CN
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = GD
...[ req_distinguished_name ]部分主要是颁证时一些默认的值,可以不动

(1) 生成根密钥

1
2
# cd /etc/pki/CA/
# openssl genrsa -out private/cakey.pem 2048

为了安全起见,修改cakey.pem私钥文件权限为600或400,也可以使用子shell生成( umask 077; openssl genrsa -out private/cakey.pem 2048 ),下面不再重复。

(2) 生成根证书

1
# openssl req -new -x509 -key private/cakey.pem -out cacert.pem

会提示输入一些内容,因为是私有的,所以可以随便输入,最好记住能与后面保持一致。上面的自签证书cacert.pem应该生成在/etc/pki/CA下。

(3) 为我们的nginx web服务器生成ssl密钥

1
2
# cd /etc/nginx/ssl
# openssl genrsa -out nginx.key 2048

我们的CA中心与要申请证书的服务器是同一个,否则应该是在另一台需要用到证书的服务器上生成。

(4) 为nginx生成证书签署请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# openssl req -new -key nginx.key -out nginx.csr
...
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:GD
Locality Name (eg, city) []:SZ
Organization Name (eg, company) [Internet Widgits Pty Ltd]:COMPANY
Organizational Unit Name (eg, section) []:IT_SECTION
Common Name (e.g. server FQDN or YOUR name) []:your.domain.com
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
...

同样会提示输入一些内容,其它随便,除了Commone Name一定要是你要授予证书的服务器域名或主机名,challenge password不填。

(5) 私有CA根据请求来签发证书

1
# openssl ca -in nginx.csr -out nginx.crt

上面签发过程其实默认使用了-cert cacert.pem -keyfile cakey.pem,这两个文件就是前两步生成的位于/etc/pki/CA下的根密钥和根证书。

到此我们已经拥有了建立ssl安全连接所需要的所有文件,并且服务器的crt和key都位于配置的目录下,唯有根证书cacert.pem位置不确定放在CentOS6下的哪个地方。
经验证以下几个位置不行:(Adding trusted root certificates to the server)
/etc/pki/ca-trust/source/anchors/etc/pki/ca-trust/source/etc/pki/ca-trust/extracted
/etc/pki/ca-trust/extracted/pem//etc/pki/tls/certs/cacert.crt
都会报错:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# docker login https://registry.domain.com:8000
Username (sean): sean
2014/11/14 02:32:48 Error response from daemon: Invalid Registry endpoint: Get https://registry.domain.com:8000/v1/_ping: x509: certificate signed by unknown authority
# curl https://sean:sean@registry.domain.com:8000/
curl: (60) Peer certificate cannot be authenticated with known CA certificates
More details here: http://curl.haxx.se/docs/sslcerts.html
curl performs SSL certificate verification by default, using a "bundle"
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn't adequate, you can specify an alternate file
using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
the -k (or --insecure) option.

(6) 目前让根证书起作用的只发现一个办法:

1
2
3
4
5
# cp /etc/pki/tls/certs/ca-bundle.crt{,.bak} 备份以防出错
# cat /etc/pki/CA/cacert.pem >> /etc/pki/tls/certs/ca-bundle.crt
# curl https://sean:sean@registry.domain.com:8000
"docker-registry server (dev) (v0.8.1)"

cacert.pem根证书追加到ca-bundle.crt后一定要重启docker后台进程才行。

如果docker login依然报错certificate signed by unknown authority,参考Running Docker with https,启动docker后台进程时指定信任的CA根证书:

1
2
3
4
5
6
7
# docker -d --tlsverify --tlscacert /etc/pki/CA/cacert.pem
或者将cacert.pem拷贝到~/.docker/ca.pem
# mkdir ~/.docker && cp /etc/pki/CA/cacert.pem ~/.docker/ca.pem
# docker -d
最好重启一下registry
# docker restart <registry_container_id>

上面用“如果”是因为一开始总提示certificate signed by unknown authority,有人说将根证书放在/etc/docker/certs.d下,还有人说启动docker daemon收加入--insecure-registry .. 但终究是因为版本差异不成功。但后来又奇迹般的不需要--tlscacert就好了。
这个地方挣扎了很久,重点关注一下这个下面几个issue:

  • https://github.com/docker/docker-registry/issues/82
  • https://github.com/docker/docker/pull/2687
  • https://github.com/docker/docker/pull/2339

(7) 最终搞定:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# docker login https://registry.domain.com:8000
Username: sean
Password:
Email: zhouxiao@domain.com
Login Succeeded
# curl https://sean:sean@registry.domain.com:8000
"docker-registry server (dev) (v0.8.1)"
# docker push registry.domain.com:8000/centos6:test_priv
The push refers to a repository [registry.domain.com:8000/centos6] (len: 1)
Sending image list
Pushing repository registry.domain.com:8000/centos6 (1 tags)
511136ea3c5a: Image successfully pushed
5b12ef8fd570: Image successfully pushed
68edf809afe7: Image successfully pushed
40627956f44c: Image successfully pushed
Pushing tag for rev [40627956f44c] on {https://registry.domain.com:8000/v1/repositories/centos6/tags/test_priv}

但还有一个小问题没解决,虽然已经可以正常使用,但每次请求在nginx的error.log中还是会有[error] 8299#0: *27 no user/password was provided for basic authentication,应该是这个版本docker暂未解决的bug。

3.3 其它问题

(1) docker后台进程意外中断后,重新docker start <container_id>报错

1
2
3
4
5
# docker start b36bd796bd3d
Error: Cannot start container b36bd796bd3d: Error getting container b36bd796bd3d463c4fedb70d98621e7318ec3d5cd14b2f60b1d182ad3cbcc652
from driver devicemapper: Error mounting '/dev/mapper/docker-253:0-787676-b36bd796bd3d463c4fedb70d98621e7318ec3d5cd14b2f60b1d182ad3cbcc652'
on '/var/lib/docker/devicemapper/mnt/b36bd796bd3d463c4fedb70d98621e7318ec3d5cd14b2f60b1d182ad3cbcc652': device or resource busy
2014/11/08 15:14:57 Error: failed to start one or more containers

经分析产生这个问题的原因是做了一个操作:在docker后台进程启动的终端,继续回车后会临时退出后台进程的日志输出,我就在这个shell下使用yum安装软件包,但由于网络原因yum卡住不动,于是我就另起了一个终端kill了这个yum进程,不知为何会影响到表面已经退出前台输出的docker。解决办法是umount容器的挂载点:(见这里)

1
2
3
# umount /var/lib/docker/devicemapper/mnt/b36bd796bd3d463c4fedb70d98621e7318ec3d5cd14b2f60b1d182ad3cbcc652
# service docker start 正常

能想到的另外一个办法是,启动docker后台进程时,重定向输出docker -d > /dev/null 2>&1(/var/log/docker已自动记录了一份日志)。

(2) 配置完nginx的docker-registry.conf后启动报错

1
2
# service nginx start
[emerg] 14714#0: unknown directive "upstream" in /etc/nginx/conf.d/docker-registry.conf:4

原因是nginx版本太低,一些配置指令不兼容,使用yum install nginx默认安装了1.0.x,卸载重新下载nginx-1.4.7-1.el6.ngx.x86_64.rpm安装解决。

(3) 网络设置代理问题
pull, push官网的镜像时由于GFW的原因需要设置代理,但不是http_proxy而是HTTP_PROXY,对于docker来说同时设置这两个值就会出问题,有时出于安装软件包的需要设置http_proxy,就会导致冲突。在docker-registry中如果忘记了当前哪一个在起作用,找遍所有问题都发现不了原因,而docker返回给我们的错误也难以判断。切记~

TO-DO
如何删除docker-registry的里的镜像

4. 参考

  • 部署自己的私有 Docker Registry [英文]
  • Official docker-registry README
  • How To Set Up a Private Docker Registry on Ubuntu 14.04
  • The Docker Hub and the Registry spec

素描立体感 ——三大面、五大调子

  1.jpg

物体立体感对初学者来说也是个难题。物体在光线的照射下产生产体感。那么,在作画时,就要去找出物体的明暗交界线,先确立明暗两在面(块)。再画出投影, 物体的立体感就已经很强了。接下去把“三大面”、“五大调子”都找出来,物体的立体感也就塑造完毕。那么,什么是“三大面”、“五大调子”呢?这都是对物 体的明暗关系而言的。所谓“三大面”即黑、白、灰。“黑”指物体背光部;“白”指物体受光部;“灰”指物体侧光部。“五大调子”指高光(最亮点)、明部 (高光以外的受光部)、明暗交界线、暗部(包括反光)、投影。另有一说即去掉“投影”加上“反光”,为“五大调子”。

明白了“三大面”、“五大调子”物体的立体感也就容易表现了。结构画法中以线的虚实就能表现物体的立体感,另论。

2.jpg

质感、量感

质感简单说就是物体给人感觉是什么质地。量感就是物体的份量、重量感。质感与量感一般情况都是混合在一起的。质感表现出来了、量感也就容易出来。

如何表现质感,一般说细腻、柔和、光滑的物体用细一点的线条去表现,如瓷器、丝绸等;表面粗糙的物体宜用粗放的线条去表现,如陶器、粗布等,还 可根据物体固有色的深浅,使用B数大一点或小一点的铅笔来表现质感量感,如浅色瓷器可用B-3B来表现,深色陶器可用4B、5B先铺大关系,再结合2B、 3B来刻划一下细节。

在素描绘画当中,最关键的当然是结构。

现实中很多画家,由于对人物或物体结构缺乏了解,最后只能走形式的路子,在创作中很难拿出具有深度的力作。虽然我们已经有了方便的照相机(现在 都使用数码相机)和扫描仪,可以在电脑中处理图形,能够省却很多造型的麻烦,但是,形是形,结构是结构,并不是一个概念。对绘画的过程而言,形是附着在结 构之上的表象,而结构才是对象的支撑;外在形的轮廓无法真正表现对象的内在美。

我们所观察到的对象的外形,那是一种表象,一种轮廓。当对象一旦变换位置,而我们又缺乏对结构的了解,就很难着手。在初学阶段,几乎每个人都经 历了利用稳定的三角形来确定形体的大体位置和构图,然后再用小的虚拟的三角形、方形等分解被画对象局部的位置,这样的方法最后只能是比葫芦画瓢,照相般描 绘对象。

就像我们已经走过了充饥的年代一样,我们已经走过了缺图的年代,正跨入一个读图的时代。各种图形、图像、图库层出不穷,再用照相的方法——抄照 片去再现对象,倒不如干脆去搞摄影算了,那我们还不如照相机来得客观。对画家来说,最难以接受的便是被人夸奖为:看画得多好,像照片一样。也就是说,那些 个作品没有强烈、强调和更深层次的东西,缺少画家对形体结构的理解和对对象的内涵表现的创意,这又怎么能算得上绘画的艺术作品呢?

艺术的真实,并不是纯客观的真实,而是画家通过自己的感官和手,表现画家内心的感受的一种艺术的真实——去粗取精、去伪存真、由此及彼、由表及里的刻画与刻划。

对于习惯于使用明暗调子的人来说,总是觉着只有这样画才是扎实的素描。其实,经过后来的习作,我还是感到不过强烈,描的东西太多,而刻的地方太少。

应该说利用素描明暗来刻画对象的体积还是有用的。但是如何从明暗调子中走出来,却不是一件很容易的事情。脑子里的固有观念和习惯的势力,加之悟性提高缓慢,使本来想丢弃的画法还会不时的有所反复。

明暗调子就像钢琴的键盘,越是多越能表现得丰富。我们使用的铅笔还能出产7B、8B的吗?即便是有了9B、10B的,也无法表现出现实模特儿空 间的黑,黑与白的对比只是相对的。在舞台美术的布景暗调子处理上,使用纯黑+普兰在灯光的照射下也泛白,就改用黑丝绒,可我们的绘图纸如何表现出这样的黑 洞?其实黑与白只是一种感觉。强烈的感受需要我们改变以往的写生的办法,摒弃故有的脑子里的死的概念,用全新的思维,在结构意志的控制下,充分发挥我们自 己的感触而凝注在笔端的力度,画出对象感受的神似。

不停地改变自己固有的观念,不断尝试新的绘画方法,千万不能为完成一幅作品小心翼翼的作业,完成作业不能成为我们目的的负担。不然,你将丢弃更多尝试的机会,千篇一律的重复自己的已知而禁锢自己思维的想象空间。

在素描作业过程中,对初学者来说,最经常遇到的就是所描绘的对象准确和不准确的问题。这就给我们提出素描作业模糊性问题,模糊概念是指没有明确 胙延的概念,如“明与暗”、“长与短”、“大与小”、“虚与实”等等,这些在绘画语言中常用的概念都是通过大致的比较而得来的,它们之间都没有绝对的分明 的界限,无法用精确的数据来划分这些概念之间的差别。正因为这样,素描写生的准确性是随着作者理解能力和技巧不断提高而提高的,这也是素捞 写一准确性认识的特殊性。

那么怎样才能少一点模糊性,多一点准确性,使我们素描写生准备程度不断提高呢?

首先是认识上的提高,再是方法要正确。认识的提高应是鉴赏能力的提高。经常看看一致公认的好素描作品。这个好作品也就是比较准确的作品。多分析、多研究,认训它好在哪里,看多了作作品,眼界自然就提高了,自己作画时也就会慢慢向好的标准靠拢。

比较是素描写生时唯一正确有效的方法,素描写生过程中认识和标准的模糊性,只有不断地、反复地进步比较,找出问题,改正错误,不断完善,这个工作做得认真细致、越深入,那么画面就会越完美,越准确。绝以的准确是不可以的,只要达到一种共识的准确程度就算可以了。

在传统的素描写生理论中,有非常完整的关于“点”和“线”的应用法则,然而对于初学者来说,并不是所有理论和法则教能够被熟练地认识和利用的。 譬如说在测量和确定物体的比例时,队了可以凭直觉来判断外,还可以通过使用铅笔来测量线段与线段之间的距离来判别。其中关于“用铅笔来测量距离的方法”就 值得进行分析和探讨。这是一种对物体的各种线段的长度(通常有两个端点)进行比较的方法。由于手工测量的模糊性,通常所能判断的仅仅是线条这间的长短,而 不可能对线条的精确数值进行比较。事实上,用这样的方法在画面上表现物体的形体比例有许多困难,因为在形象思维活动过程中,人们地“精确数值”的理解能力 非常有限,只能认识和表现一些带有规律性的模糊比值,诸如此类的例子还有很多。下面就让我们来探讨一下素描写生中的几个关于“点”、“线”和“面”的运用 方法。

一个中间“点”

谁都知道,一根线条由两个端点组成,而用视觉手段对一要红条进行准备分割时,最容易的是找出它的中间点的位置,这是由人的形象思维的特点所决定 的。在素描写生过程当中,有许多关系需要我们仔细地加以辨别和判断,不妨可以利用“先找出中间点的方法”来确定最基本的比例关系,例如,在进行头像写生 时,可以在画好了大体的轮廓之后,首先确定一下眼睛的位置,因为眼睛的位置往往是处在头部的中间(也就是处在上下关系的中点位置);然后再去确定其它的位 置和比例关系就显得比较容易,这种现象完全符合人的形象思维的特征。

事实上,我们还可以举出很多诸如此类的例子,譬如说在描绘整个石膏胸像的时候,首先我们可以确定上下两个端点的位置,即头顶和底座的位置,紧接 着在通常情况下,最容易寻找和描绘的必然是下巴的位置,因为它时常处在二分之一的地方。我国古代有许多关于绘画定点定形的理论知识,其中“三庭五眼”就是 在人物头像描绘中对水平方向和垂直方向进行规律性的分析总结而形成的经典理论。

两个基本“线”

两条基本“线”是指水平线和垂直线的运作,具体地说,我们可以把在写生当中所要处理的各类线条归纳为“接近垂直”和“接近水平”两种情况,就是以“水平线”或者“垂直线”作为衡量的标尺,去测量和比较各种接近于它们的线条的性质,从而来把握画面的整体关系。

在画人物像素描时水平线、垂直线比较法一般用来确定结构下下和左右的位置,如两眉弓骨点发生透视变化后,哪个骨点,哪个骨点下,如果用眼睛看不 准的话,用水平的铅笔对着对象一量就看出来了。又如俯视头像的耳和后脑不易画准,但只用水平线横着一量就会确定上耳轮会上移到眉弓和发际之间的位置,耳垂 会上移到颧骨的位置不易找准,但只要用垂直线量一下,它是在鼻翼左边不是右边,在嘴角的左边还是右边,或者在一条垂直线上就一目了然。经此类推,头部的个 细小的结构都可以通过水平线和垂直线比较的方法找出来。更准确的某一个点还可以用水平线和垂直线相交的座标点找出来。

多种几何“块面”

“三块面”是指多种组合的单位几何形比较法。单位几何形比较法是说观察对象的亮面所呈现出的类似平面几何形。如额面受光面呈长方形或者不等边的 梯形,这些几何的面积如何,再把画面上额面受光面进行比较。如果把长方形画成正方形或者把梯形画成长方形,就是说画面上的几何形和对象的几何开不能成为相 似的几何形,那就证明画错了。又如眉弓和眼之间呈锐角三角形的这面,再检查一下画面上这块亮面是否也呈三角形并与地象上的三角形相似。暗面也同法比较,这 种方法可把时暗块面比较得基本准备。

综上所述,要提高素描写生准确的程度,必须整体观察事例把握,结合“一点”、“两线”、“三块面”的方法并灵活运用。这样将对迅速有效地提高造型控制能力。

怎样把素描画得整体?

整体表现是画好素描的关键。素描作画要做到整体观察和整体表现。

整体的观察方法有三种:

(1)“同时看”的方法。缩短对单个目标的观看时间,加快对多个目标的观看频率,用于观察整体关系。

(2)“对比看”的方法。一次将两个类似的目标频繁对照着看。用于“测量”和确定比例、明暗、形状等物体形式。

(3)“眯眼看”的方法。眯起双眼,破坏视线的焦点,使整个物体“虚”化,通过强制的手段得到整体观察效果。

整体表现有六个要求:

(1)先大后小。这里的大与小,是指物体的基本形和局部形的大小关系,例如,头部作为一个立方体是基本大形,而五官则是基本大形中的局部小形。 同鼻子相比,五官是基本大形,而鼻子则是五官中的局部小形,鼻翼又是鼻子中的更小的形。违背这一要点,会造成“形体不准”的结果。

(2)先草后精。在物体形没有确定之前,不能单独将某一部分过分细致地刻画。违背这一要点,会造成画面“碎”和整体失衡的结果。

(3)先直后曲。直线比弧线简单,方形比圆形简单,平面比球面简单,所以,应“先直后曲”,以便于把握形的准确性。违背这一要点,会造成“比例不准”的结果。

(4)先暗后明。每一次、每一遍、每一个阶段,每个体、每个面、每个局部的开始,都要从最暗处画起,再画次暗、灰部,最后是亮部。违背了这一要点,会造成“明暗失调”的结果。

(5)先实后虚。先画感觉的强点,后画感觉的弱点。违背了这一要点,会造成“画面平板”的结果。

(6)先近后远。先画前面物体,再以后面物体相衬托,使主要物体突出、明显。违背了这一要点,会造成“喧宾夺主”的结果。

色彩的体系2

1. 色彩三属性

色彩的基本要素色:色相、明度、彩度,称为色彩三属性。

1. 色相(Hue,简写为H)

色相是用来区分色彩的名称,即是依不同波长色彩的相貌所称呼的「名字」,如红、橙、黄、绿、蓝、紫等。当我们描述色彩时,最常用「色相」来沟通,产生共识。

mht1120(1).tmp

认识各种不同的色相,如同学习使用色彩的语言一般;能准确地辨别和运用是非常重要的,除了以常用的色名做基本沟通之外,最好能用标准色票或是明确的色彩样本,帮助我们做更准确的沟通。

各种色票
mht1133(1).tmp

mht1145(1).tmp

2. 明度(Value,简写为V)

不同的色彩,有不同的明暗;色彩的「明度」即是色彩明暗的程度,如纯黄色比纯绿色来得明亮;纯黄色是明度高的色彩,而纯绿色的明度略低。
反射光量较多时色彩较亮,明度较高。
反射较少时,色彩较暗,明度也较低。
色彩中白色的明度最高,黑色最低。

mht1158(1).tmp

我们在判断辨别色彩明度时,常以无彩色的黑白及各种灰色作标准来对照。
色彩的明度差异,是分辨物体形状的重要依据,它也和质感、量感、空间感、气氛等有密切的关係。

可以在同一色相色彩,以加入白色来提高明度;加入黑色来降低明度的方式,产生一系列的色彩变化,如浅红、澹红、亮红、深红、暗红即是红色不同的明度变化。

mht115B(1).tmp

3. 彩度(Chroma,简写为C)

彩度是指色彩的纯粹度或饱和度,亦可说是区分色彩鲜浊的程度。
彩度的高低,是以色彩中某种纯色的比例来分辨比较,所以某一色彩加入其他色彩时,彩度就会降低。
要比较不同色彩间的彩度时,必须以指定某纯色当依据才能比较。
「鲜豔」、「鲜明」的色彩,通常即是「高彩度」色彩(以各种纯色为准)。
粉色、澹色、浅色、暗色、浊色属于 「低彩度」色彩(以各种纯色为准)。

mht116E(1).tmp

2. 色立体

色立体(Color Solid),即是以色彩三要素,有系统的组合排列成立体的色彩结构。

mht1171(1).tmp

其基本结构是以明度阶为中心轴。
向上明度渐高至顶点白色。
向下明度渐低至底点黑色。

mht1183(1).tmp

mht1196(1).tmp

以某一色相为准,加上明度、彩度变化,即可形成一「同色相面」(或称「等色相面」)。各同色相面,依色环顺序,以明度中心轴作放射状排列,即形成一「色立体」结构。

mht1199(1).tmp

mht11AB(1).tmp

曼赛尔体系色立体之同色相面

其构成方式是以明度阶段为垂直轴,再以彩度阶段为水平轴,因为各阶段的明度皆有同明度的彩度阶段向外延伸,因而形成一个以此轴为主的平面,而这个平面即该色相的「等色相面」。在等色相面中,同一水平方向之明度皆相同而同一垂直方向之各色,其彩度相同。

理论上任何色彩皆可在色立体中找到;若从色立体的无彩色轴纵剖开来,则左右两等色相面的色相,正是色相环上相对位置约两色(即补色);若水平横剖开来,则可 以得到任意一个「同明度面」;若在色立体中分别截出一个高明度的横断色面兴低明度的横断色面,再比较同一位置上的两色彩则可得知一个事实,即各色相因为有 不同明度与彩度的关係,虽然是同一色相,但却使人有截然不同的感觉。

3. 表色系统

色彩体系通常可分为两大类:

1.以色光的溷色为准的表色系(或称溷色系)。
2.色彩颜料调色为准的表色系(或称显色系)。

1. 伊登表色系统:

伊登表色体系的色相有十二色,以红、黄、蓝三原色为基础,将红、黄、蓝三个第一次色两两溷合成为,橙、绿、紫第二次色,再将第一次色和第二次色溷合,得到黄橙、黄绿、青绿、红紫、青紫六个第三次色,伊登的色相环极具有教育功能,对溷色的概念,色环的类似和对比色的了解十分重要。

mht11BE(1).tmp

2. 曼塞尔表色系

曼塞尔的色相分为10个,每色相再细分为10,共有100个色相,并以5为代表色相,色相之多几乎是人类分辨色相的极限。
曼塞尔的明度共分为11阶段,N1、N2、N3…N10,而彩度也因各纯色而长短不同,例如5R纯红有14阶段,而5BG只有6阶段,其色立体也因而呈不规则状。

mht11C1(1).tmp

mht11D4(1).tmp

3. 奥斯华德表色系

奥斯华德色相以8色相为基础,每一色相再分3色,共24色相,明度[阶段由白到黑,以a、c、e、g、i、l、n、p记号表示,所有色彩均为C纯色量+W白色量+B黑色量=100。并以无彩色阶段为一边,纯色在另一顶点、每边长依黑白量渐变排成8色,形成等色相的正三角形。由于奥斯华德表色系的秩序严密,是配色时极方便的表色系统。

mht11E6(1).tmp

mht11E9(1).tmp

mht11FC(1).tmp

4. PCCS体系(实用配色体系)

PCCS为Practical Color Co-ordinate System的简写,是日本色彩研究所于西元1965 年发表了实用性配色用的色彩体系。
PCCS综合了曼赛尔和奥斯华德体系的优点,针对色彩教育、色彩计画、色彩调查、色彩传播等实用需求所发展出来的色彩体系。

PCCS体系以色彩三要素为基础,但它将明度和彩度合成「色调」(Tone),将色彩以色相和色调的观念来讨论。这种方式和平常表达色彩的情况相似,例如鲜红色、浅红色、粉红色,「红」是色相,而「鲜、浅、粉」即是色调。

mht120E(1).tmp

PCCS体系的色相以接近色光三原色和色料三原色的光谱色红、橙、黄、绿、蓝、紫等6色为基础,可成为12、24、48色等不同的色相环,其中以24色相环为准。

mht1211(1).tmp

mht1224(1).tmp

mht1237(1).tmp

mht123A(1).tmp

mht124C(1).tmp

 

mht125F(1).tmp

 

参考文章:
1.色彩原理,龙腾出版
2.http://content.edu.tw/vocation/art/ks_hc/htm/content/ch06/newpage2.htm