王某某的笔记

记录我的编程之路

私服(存储库管理器)

存储库管理器是专用于管理二进制组件存储库的服务器应用程序。
对于Maven的大量使用,使用存储库管理器被认为是必不可少的最佳实践。

搭建私服的目的

  • 充当公共Maven存储库的专用代理服务器
  • 提供存储库作为您的Maven项目输出的部署目标

特点和好处

  • 大大减少了从远程存储库下载的次数,节省了时间和带宽,从而提高了构建性能
  • 由于减少了对外部存储库的依赖,提高了构建稳定性
  • 与远程SNAPSHOT存储库交互的性能提高
  • 控制消耗和提供的伪镜像的能力
  • 将构建输出暴露给其他项目和开发人员等消费者,以及质量保证或运营团队甚至客户
  • 提供了一个有效的平台来交换组织内外的二进制工件,而无需从源代码构建工件

NEXUS 私服搭建

NEXUS OSS 是我们常用的私服软件

Nexus是一个强大的Maven存储库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。
利用Nexus你可以只在一个地方就能够完全控制访问和部署在你所维护仓库中的每个Artifact。

下载

1
wget https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.13.0-01-bundle.tar.gz

安装配置

nexus 不建议以root用户运行
新添加一个用户:

1
2
3
4
useradd nexus

passwd nexus

切换到nexus用户

1
tar -zxvf nexus-2.13.0-01-bundle.tar.gz

解压后会在同级目录中,出现两个文件夹:nexus-2.13.0-01sonatype-work,前者包含了nexus的运行环境和应用程序,后者包含了你自己的配置和数据。

关于目录:
sonatype-work/nexus/storage/central : 用于放置maven从中央仓库中下载下来的项目
pom.xml中配置到的相关jar包

注意:nexus默认的jar包存储位置是:sonatype-work/nexus/storage/central由于Central仓库占用存储较大,所以要注意存储位置。

sonatype-work/nexus/storage/thirdparty : 用于放置自己手动上传的第三方jar包

sonatype-work/nexus/storage/releases : 用于放置项目deploy后的发布版

运行测试

进入目录 nexus-2.13.0-01
输入nexus可以看到提示

1
bin/nexus

Usage: bin/nexus { console | start | stop | restart | status | dump }

启动

1
bin/nexus start

Starting Nexus OSS…
Started Nexus OSS.

查看控制台:

1
bin/nexus console

访问地址:http://192.168.1.250:8081/nexus

登录默认账号/密码 ==admin/admin123==

设置开机启动

复制nexus 到/etc/init.d/

1
cp bin/nexus /etc/init.d/

修改文件

1
2
3
4
5
6
7
8
9
vi  /etc/init.d/nexus

#修改下面两个配置

#修改为解压缩的目录
NEXUS_HOME="/xxxx/nexus/nexus-2.13.0-01"

RUN_AS_USER=nexus

添加服务并设置为开机启动

1
2
3
4
5
6
chkconfig --add nexus
chkconfig nexus on

systemctl start nexus

systemctl status nexus

配置

1. 下载索引

打开 Repositories 将列表中所有Type为proxy 的项目的 Configuration 中的 Download Remote Indexes 设置为True
然后在Central 仓库上右键然后点击 Repair Index 下载中心仓库的索引文件,若干时间后,可以点击下边的 Browse Index 即可看见下载的索引文件
可以通过左侧到任务调度查看任务

2. 关于部署

将Releases仓库的Deployment Policy设置为Allow ReDeploy
设置 deployment 账户密码
左侧Security –> Users –> deployment –> 右键Set Password

3. 使用阿里云的maven镜像库

在 Repositories 中增加一个 proxy

key value
Repository ID Aliyun-mavne
Repository Name Aliyun
Repository type proxy
Provider Maven2
Format maven2
Repository Policy Release
Remote Storage Location https://maven.aliyun.com/repository/public/
Download Remote Indexes True
Auto Blocking Enabled True
File Content Validation True
Checksum Policy Warn
Allow File Browsing True
Include in Search True
Publish URL True

4. Public Repositories

public repository默认包含本地仓库的Releases, snapshots和3rd party以及代理仓库的Maven Central. 你可以在Configuration配置页添加其他仓库到这个仓库组。
请注意,“Ordered Group Repositories”中列出的存储库库 顺序 很重要。当存储库管理器在组中搜索构建时,它将返回第一个匹配项。

建议将添加的阿里云maven镜像移动到 Central 前面
一般顺序为:Release、Snapshot、3rd party、Aliyun、Central



项目中使用NEXUS私服

两种方式:

  1. 在项目的POM文件中配置
  2. 在全局的setting文件中配置

项目POM配置使用Nexus

在项目的 pom.xml 中配置私库地址,pom.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
 <!-- 仓库地址 -->
<repositories>
<repository>
<id>nexus</id>
<name>Nexus Repository</name>
<url>http://192.168.19.250:8081/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>

<!-- 插件地址 -->
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>Nexus Plugin Repository</name>
<url>http://192.168.1.250:8081/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>

<!-- 打包发布 -->
<distributionManagement>
<repository>
<id>releases</id>
<url>http://192.168.19.250:8081/nexus/content/repositories/releases</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://192.168.19.250:8081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>

如要部署构建到nexus,需在maven 的settings.xml文件中添加认证信息
默认位置在:

1
2
${maven.home}/conf/settings.xml  
${user.home}/.m2/settings.xml

两边配置文件中的ID要对得上

1
2
3
4
5
6
7
8
9
10
11
12
<servers>
<server>
<id>releases</id>
<username>deployment</username>
<password>123456</password><!--这个密码就是你设置的密码-->
</server>
<server>
<id>snapshots</id>
<username>deployment</username>
<password>123456</password>
</server>
</servers>

Maven的Setting文件配置使用Nexus

为避免在每个项目中重复进行配置,可以将上面的配置写在Setting.xml中

settings.xml并不直接支持上面的两个元素,需要利用 profile,然后用activeProfiles来自动激活这个profile,以提供用户全局范围的仓库配置。

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
<profiles>	    
<profile>
<id>dev</id>
<repositories>
<repository>
<id>nexus</id> <!-- 如取名为central可覆盖超级POM中央仓库的配置,最佳实践是这里随便配,然后mirrorOf * -->
<url>http://192.168.1.250:8081/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<url>http://192.168.1.250:8081/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>

激活配置

1
2
3
<activeProfiles>  
<activeProfile>dev</activeProfile>
</activeProfiles>

此外还可以在命令上用**-p**参数激活此配置文件,例如:

1
mvn -Pdev ...

注意:

Maven会优先使用其他仓库,最后再使用中央仓库。(简单测试了一下)

当Maven需要下载或发布快照版本构件时它会先检查配置的其他仓库,最后再检查central看是否支持该类型的构件,得到正面的答复之后再向相应的仓库发起请求, 如果配置了镜像则根据镜像匹配规则转发。

如果配置了镜像那仓库的URL已经无关紧要,因为所有的请求都会通过镜像访问。

如果将仓库和插件仓库的ID都为配置为central,可覆盖超级POM中央仓库的配置,并开启快照版本的支持等。

使用镜像

如果你的地理位置附近有一个速度更快的central镜像,或者你想覆盖central仓库配置,或者你想为所有POM使用唯一的一个远程仓库(这个远程仓库代理所有必要的其它仓库),你可以使用settings.xml中的mirror配置。

使用镜像的原因:

  1. 网上有了一个地理位置更近,速度更快的镜像
  2. 使用自己内部存储替换特定的存储,从而更换的控制它
  3. 运行了存储库管理软件以向镜像提供本地缓存,而需要使用其URL

配置用某个镜像覆盖Maven自带的central

1
2
3
4
5
6
7
8
<mirrors>
<mirror>
<id>other-mirror</id>
<name>Other Mirror Repository</name>
<url>https://other-mirror.repo.other-company.com/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>

将mirrorOf配置为central

将mirrorOf设置为 * 对所有请求强制使用单个存储库,这个存储库必须包含所有所需的构件,或者能够将请求代理到其他存储库。

1
2
3
4
5
6
7
8
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<name>Mirror all</name>
<url>http://192.168.1.91:8081/nexus/content/groups/public</url>
</mirror>
</mirrors>

所有的请求都将通过私服,包括下载之外的请求



最佳实践

配置镜像

1
2
3
4
5
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://nexus.xxx.com:8081/nexus/content/groups/public</url>
</mirror>

profile中配置repository

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus</id>
<url>http://nexus</url><!--地址随意-->
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<url>http://nexus</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>

激活profile

1
2
3
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>


Nexus其他配置

任务调度

左侧导航栏“Administration”中选择“Scheduled Tasks”
可以打开任务调度面板,在面板中可以看到当前正在运行的任务
添加任务:ADD –> 选择任务类型 –> 配置运行方式

运行方式:

每天
每周
手动等

任务类型:

download indexes 为代理仓库下载远程索引
清空缓存
发布索引
重建索引
reindex repositories 编纂索引
删除快照构件



访问授权问题

当 Nexus 关闭匿名访问时可进行如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
关闭镜像

覆盖中央仓库配置:
profile -> id(xxx) -> repositories -> repository
id 配置为:central
url 配置为:私服地址

激活配置:
activeProfiles -> activeProfile(xxx)

配置用户名密码:
<servers>
<server>
<id>central</id>
<username>admin</username>
<password>123456</password>
</server>
</servers>

麦克风

使用 arecord 录一段声音

1
sudo arecord -D "plughw:1,0" -d 5 f1.wav
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
      arecord [flags] [filename]
aplay [flags] [filename [filename]] ...
选项:
-h, --help帮助.
--version打印版本信息.
-l, --list-devices列出全部声卡和数字音频设备.
-L, --list-pcms列出全部PCM定义.
-D, --device=NAME指定PCM设备名称.
-q --quiet安静模式.
-t, --file-type TYPE文件类型(voc,wav,raw或au).
-c, --channels=#设置通道号.
-f --format=FORMAT设置格式.格式包括:S8 U8 S16_LE S16_BE U16_LE
U16_BE S24_LE S24_BE U24_LE U24_BE S32_LE S32_BE U32_LE U32_BE
FLOAT_LE FLOAT_BE FLOAT64_LE FLOAT64_BE IEC958_SUBFRAME_LE
IEC958_SUBFRAME_BE MU_LAW A_LAW IMA_ADPCM MPEG GSM
-r, --rate=#&lt;Hz&gt;设置频率.
-d, --duration=#设置持续时间,单位为秒.
-s, --sleep-min=#设置最小休眠时间.
-M, --mmap mmap流.
-N, --nonblock设置为非块模式.
-B, --buffer-time=#缓冲持续时长.单位为微妙.
-v, --verbose显示PCM结构和设置.
-I, --separate-channels设置为每个通道一个单独文件.

demo

1
2
3
4
5
    aplay -c 1 -t raw -r 22050 -f mu_law foobar
播放raw文件foobar.以22050Hz,单声道,8位,mu_law格式.

arecord -d 10 -f cd -t wav -D copy foobar.wav
以CD质量录制foobar.wav文件10秒钟.使用PCM的"copy".

装播放器

1
sudo apt-get install omxplayer

播放录的声音

1
2
omxplayer f1.wav 

摄像头

1
raspistill -o keychain.jpg -t 2000 

https://www.elastic.co/products/elasticsearch

验证环境:

Elasticsearch 2.4.1
CentOS Linux release 7.2.1511 (Core)

安装

YUM安装

下载并安装公钥
rpm –import https://packages.elastic.co/GPG-KEY-elasticsearch

在目录 /etc/yum.repos.d/ 下添加一个文件 elasticsearch.repo 内容如下:

[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=https://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

安装:

yum install elasticsearch

开机启动:

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service

解压安装

去官网下载合适的tar包
https://www.elastic.co/downloads/elasticsearch

# crul 下载
curl -O https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.4.1/elasticsearch-2.4.1.tar.gz
# ---------------------------------------------------
# wget 下载
# 如果没有wget需要先安装
yum install wget

## 下载
wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.4.1/elasticsearch-2.4.1.tar.gz

## 解压
tar -xvf elasticsearch-2.4.1.tar.gz 

配置

修改配置文件config/elasticsearch.yml

# ---------------------------------- Cluster -----------------------------------
#配置集群名称
cluster.name: wwh_es_cluster

# ------------------------------------ Node ------------------------------------
#配置节点名称,不同节点名字需要不同
node.name: node-213

# ----------------------------------- Paths ------------------------------------
# Path to directory where to store the data (separate multiple locations by comma):
#
# path.data: /path/to/data
#
# Path to log files:
#
# path.logs: /path/to/logs

# ---------------------------------- Network -----------------------------------
# Set the bind address to a specific IP (IPv4 or IPv6):

network.host: 192.168.1.213

# Set a custom port for HTTP:
#
# http.port: 9200
#

# --------------------------------- Discovery ----------------------------------
#集群中可以作为master节点的初始列表,通过这些节点来自动发现新加入集群的节点
discovery.zen.ping.unicast.hosts: ["wwh213", "wwh214"]

#其他的根据需要来配置

复制到其他机器(可以安装完其他的再一起复制)

1
2
3
scp -r elasticsearch-2.4.1 wwh214:/data/es/
scp -r elasticsearch-2.4.1 wwh215:/data/es/

然后修改为不同的节点名称

插件

elasticsearch-head

ElasticSearch-Head 是一个与Elastic集群(Cluster)相交互的Web前台。
ES-Head的主要作用

  • 它展现ES集群的拓扑结构,并且可以通过它来进行索引(Index)和节点(Node)级别的操作
  • 它提供一组针对集群的查询API,并将结果以json和表格形式返回
  • 它提供一些快捷菜单,用以展现集群的各种状态

官网地址:
https://github.com/mobz/elasticsearch-head
http://mobz.github.io/elasticsearch-head/

安装:

bin/plugin -install mobz/elasticsearch-head

or

bin/plugin install mobz/elasticsearch-head

访问地址:
http://192.168.1.213:9200/_plugin/head/

Kibana 4.6.1

Kibana是一个开源的数据可视化平台,使您可以通过惊艳、强大的图形结合定制的仪表板,帮助您对数据进行分析与数据进行交互。
Kibana 4.6.1 与Elasticsearch 2.4.x.兼容
Kibana也可以使用apt或yum安装
https://www.elastic.co/guide/en/kibana/4.6/setup.html#setup-repositories

安装:

1
2
3
4
5
6
# 下载
wget https://download.elastic.co/kibana/kibana/kibana-4.6.1-linux-x86_64.tar.gz

# 解压
tar -xvf kibana-4.6.1-linux-x86_64.tar.gz

编辑 config/kibana.yml 文件

#设置elasticsearch.url 指向 Elasticsearch 实例  

elasticsearch.url: "http://192.168.1.213:9200"

运行 ./bin/kibana 启动
在浏览器中打开:
http://192.168.1.213:5601

Marvel 2.0+

Marvel是Elasticsearch的图形化监控客户端,可以用来查看当前的各项状态。优化您的Elasticsearch性能和快速诊断问题的工具。

现在的elasticsearch 更改了插件安装方式,marvel是在kibana里安装的,而不是在elasticsearch里安装的,elasticsearch里安装的只是marvel-agent.

Marvel 2.0+ 兼容最新版本的Elasticsearch 和 Kibana
Marvel 1.3 兼容 Elasticsearch 1.0 - 1.7

官网地址:
https://www.elastic.co/products/marvel
https://www.elastic.co/downloads/marvel

安装:

1
2
3
4
5
6
7
8
9
10
#安装 Marvel 到 Elasticsearch 中
# 这个license只有30天的有效期,之后需要升级

./plugin install license
./plugin install marvel-agent

#安装 Marvel 到 Kibana 中

bin/kibana plugin --install elasticsearch/marvel/latest

启动 Elasticsearch 和 Kibana
访问: http://192.168.1.213:5601/app/marvel


需要在每台机器上都安装

启动

不能直接以root用户进行启动
修改用户之后需要注意权限问题
添加用户并修改权限

#添加用户
adduser es  

#修改权限
chown -R es:es elasticsearch-2.4.1

su es

或者指定 -Des.insecure.allow.root=true

1
2
3
# -d参数表示在后台启动
bin/elasticsearch -d

查看端口是否启动

netstat -an | grep 9200
tcp6       0      0 ::1:9200                :::*                    LISTEN     
tcp6       0      0 127.0.0.1:9200          :::*                    LISTEN    

netstat -an | grep 9300
tcp6       0      0 ::1:9300                :::*                    LISTEN     
tcp6       0      0 127.0.0.1:9300          :::*                    LISTEN  

测试

通过命令

curl -X GET http://192.168.1.213:9200/

如果安装了 elasticsearch-head 直接在浏览器中打开:
http://192.168.1.213:9200/_plugin/head/


配置ElasticSearch使用内存

编辑文件:
$ES_HOME/bin/elasticsearch.in.sh

if [ "x$ES_MIN_MEM" = "x" ]; then
    ES_MIN_MEM=10g  //最小内存,根据机器内存来定
fi
if [ "x$ES_MAX_MEM" = "x" ]; then
    ES_MAX_MEM=36g  //最大内存,根据机器内存来定,最好不要超过机器物理内存的50%
fi

设置分辨率为 1920*1080 60Hz

1
sudo vi /boot/config.txt

修改如下:

1
2
3
4
hdmi_drive=2
hdmi_group=2

hdmi_mode=82

之后重启树莓派

1
sudo reboot

参考


CEA分辨率

以下是CEA规定的电视规格分辨率。这些分辨率的hdmi_group=1。

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
58
59
60
61
62
63
hdmi_mode=1    VGA
hdmi_mode=2 480p 60Hz
hdmi_mode=3 480p 60Hz H
hdmi_mode=4 720p 60Hz
hdmi_mode=5 1080i 60Hz
hdmi_mode=6 480i 60Hz
hdmi_mode=7 480i 60Hz H
hdmi_mode=8 240p 60Hz
hdmi_mode=9 240p 60Hz H
hdmi_mode=10 480i 60Hz 4x
hdmi_mode=11 480i 60Hz 4x H
hdmi_mode=12 240p 60Hz 4x
hdmi_mode=13 240p 60Hz 4x H
hdmi_mode=14 480p 60Hz 2x
hdmi_mode=15 480p 60Hz 2x H
hdmi_mode=16 1080p 60Hz
hdmi_mode=17 576p 50Hz
hdmi_mode=18 576p 50Hz H
hdmi_mode=19 720p 50Hz
hdmi_mode=20 1080i 50Hz
hdmi_mode=21 576i 50Hz
hdmi_mode=22 576i 50Hz H
hdmi_mode=23 288p 50Hz
hdmi_mode=24 288p 50Hz H
hdmi_mode=25 576i 50Hz 4x
hdmi_mode=26 576i 50Hz 4x H
hdmi_mode=27 288p 50Hz 4x
hdmi_mode=28 288p 50Hz 4x H
hdmi_mode=29 576p 50Hz 2x
hdmi_mode=30 576p 50Hz 2x H
hdmi_mode=31 1080p 50Hz
hdmi_mode=32 1080p 24Hz
hdmi_mode=33 1080p 25Hz
hdmi_mode=34 1080p 30Hz
hdmi_mode=35 480p 60Hz 4x
hdmi_mode=36 480p 60Hz 4xH
hdmi_mode=37 576p 50Hz 4x
hdmi_mode=38 576p 50Hz 4x H
hdmi_mode=39 1080i 50Hz reduced blanking
hdmi_mode=40 1080i 100Hz
hdmi_mode=41 720p 100Hz
hdmi_mode=42 576p 100Hz
hdmi_mode=43 576p 100Hz H
hdmi_mode=44 576i 100Hz
hdmi_mode=45 576i 100Hz H
hdmi_mode=46 1080i 120Hz
hdmi_mode=47 720p 120Hz
hdmi_mode=48 480p 120Hz
hdmi_mode=49 480p 120Hz H
hdmi_mode=50 480i 120Hz
hdmi_mode=51 480i 120Hz H
hdmi_mode=52 576p 200Hz
hdmi_mode=53 576p 200Hz H
hdmi_mode=54 576i 200Hz
hdmi_mode=55 576i 200Hz H
hdmi_mode=56 480p 240Hz
hdmi_mode=57 480p 240Hz H
hdmi_mode=58 480i 240Hz
hdmi_mode=59 480i 240Hz H

H means 16:9 variant (of a normally 4:3 mode).
2x means pixel doubled (i.e. higher clock rate, with each pixel repeated twice)
4x means pixel quadrupled (i.e. higher clock rate, with each pixel repeated four times)

DMT分辨率

以下是计算机显示器使用的分辨率。这些分辨率的hdmi_group=2。

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
hdmi_mode=1    640x350   85Hz
hdmi_mode=2 640x400 85Hz
hdmi_mode=3 720x400 85Hz
hdmi_mode=4 640x480 60Hz
hdmi_mode=5 640x480 72Hz
hdmi_mode=6 640x480 75Hz
hdmi_mode=7 640x480 85Hz
hdmi_mode=8 800x600 56Hz
hdmi_mode=9 800x600 60Hz
hdmi_mode=10 800x600 72Hz
hdmi_mode=11 800x600 75Hz
hdmi_mode=12 800x600 85Hz
hdmi_mode=13 800x600 120Hz
hdmi_mode=14 848x480 60Hz
hdmi_mode=15 1024x768 43Hz DO NOT USE
hdmi_mode=16 1024x768 60Hz
hdmi_mode=17 1024x768 70Hz
hdmi_mode=18 1024x768 75Hz
hdmi_mode=19 1024x768 85Hz
hdmi_mode=20 1024x768 120Hz
hdmi_mode=21 1152x864 75Hz
hdmi_mode=22 1280x768 reduced blanking
hdmi_mode=23 1280x768 60Hz
hdmi_mode=24 1280x768 75Hz
hdmi_mode=25 1280x768 85Hz
hdmi_mode=26 1280x768 120Hz reduced blanking
hdmi_mode=27 1280x800 reduced blanking
hdmi_mode=28 1280x800 60Hz
hdmi_mode=29 1280x800 75Hz
hdmi_mode=30 1280x800 85Hz
hdmi_mode=31 1280x800 120Hz reduced blanking
hdmi_mode=32 1280x960 60Hz
hdmi_mode=33 1280x960 85Hz
hdmi_mode=34 1280x960 120Hz reduced blanking
hdmi_mode=35 1280x1024 60Hz
hdmi_mode=36 1280x1024 75Hz
hdmi_mode=37 1280x1024 85Hz
hdmi_mode=38 1280x1024 120Hz reduced blanking
hdmi_mode=39 1360x768 60Hz
hdmi_mode=40 1360x768 120Hz reduced blanking
hdmi_mode=41 1400x1050 reduced blanking
hdmi_mode=42 1400x1050 60Hz
hdmi_mode=43 1400x1050 75Hz
hdmi_mode=44 1400x1050 85Hz
hdmi_mode=45 1400x1050 120Hz reduced blanking
hdmi_mode=46 1440x900 reduced blanking
hdmi_mode=47 1440x900 60Hz
hdmi_mode=48 1440x900 75Hz
hdmi_mode=49 1440x900 85Hz
hdmi_mode=50 1440x900 120Hz reduced blanking
hdmi_mode=51 1600x1200 60Hz
hdmi_mode=52 1600x1200 65Hz
hdmi_mode=53 1600x1200 70Hz
hdmi_mode=54 1600x1200 75Hz
hdmi_mode=55 1600x1200 85Hz
hdmi_mode=56 1600x1200 120Hz reduced blanking
hdmi_mode=57 1680x1050 reduced blanking
hdmi_mode=58 1680x1050 60Hz
hdmi_mode=59 1680x1050 75Hz
hdmi_mode=60 1680x1050 85Hz
hdmi_mode=61 1680x1050 120Hz reduced blanking
hdmi_mode=62 1792x1344 60Hz
hdmi_mode=63 1792x1344 75Hz
hdmi_mode=64 1792x1344 120Hz reduced blanking
hdmi_mode=65 1856x1392 60Hz
hdmi_mode=66 1856x1392 75Hz
hdmi_mode=67 1856x1392 120Hz reduced blanking
hdmi_mode=68 1920x1200 reduced blanking
hdmi_mode=69 1920x1200 60Hz
hdmi_mode=70 1920x1200 75Hz
hdmi_mode=71 1920x1200 85Hz
hdmi_mode=72 1920x1200 120Hz reduced blanking
hdmi_mode=73 1920x1440 60Hz
hdmi_mode=74 1920x1440 75Hz
hdmi_mode=75 1920x1440 120Hz reduced blanking
hdmi_mode=76 2560x1600 reduced blanking
hdmi_mode=77 2560x1600 60Hz
hdmi_mode=78 2560x1600 75Hz
hdmi_mode=79 2560x1600 85Hz
hdmi_mode=80 2560x1600 120Hz reduced blanking
hdmi_mode=81 1366x768 60Hz
hdmi_mode=82 1080p 60Hz
hdmi_mode=83 1600x900 reduced blanking
hdmi_mode=84 2048x1152 reduced blanking
hdmi_mode=85 720p 60Hz
hdmi_mode=86 1366x768 reduced blanking

通过元素用户可以自定义一个或多个Maven属性,然后在POM的其他地方使用${属性名}的方式引用该属性,这种做法的最大意义在于消除重复和统一管理。

  Maven总共有6类属性,内置属性、POM属性、自定义属性、Settings属性、java系统属性和环境变量属性;

  1. 内置属性
    两个常用内置属性 ${basedir} 表示项目跟目录,即包含pom.xml文件的目录;${version} 表示项目版本

  2. POM属性
    用户可以使用该类属性引用POM文件中对应元素的值。如${project.artifactId}就对应了 元素的值,常用的POM属性包括:

  • ${project.build.sourceDirectory}:项目的主源码目录,默认为src/main/java/
  • ${project.build.testSourceDirectory}:项目的测试源码目录,默认为src/test/java/
  • ${project.build.directory} : 项目构建输出目录,默认为target/
  • ${project.outputDirectory} : 项目主代码编译输出目录,默认为target/classes/
  • ${project.testOutputDirectory}:项目测试主代码输出目录,默认为target/testclasses/
  • ${project.groupId}:项目的groupId
  • ${project.artifactId}:项目的artifactId
  • ${project.version}:项目的version,与${version} 等价
  • ${project.build.finalName}:项目打包输出文件的名称,默认为${project.artifactId}-${project.version}
  1. 自定义属性
    随便写

  2. Settings属性
    与POM属性同理,用户使用以settings. 开头的属性引用settings.xml文件中的XML元素的值。

  3. Java系统属性
    所有java系统属性都可以用Maven属性引用,如${user.home}指向了用户目录。

  4. 环境变量属性
    所有环境变量属性都可以使用以env. 开头的Maven属性引用,如${env.JAVA_HOME}指代了JAVA_HOME环境变量的的值。

1. 安装配置DNSmasq

DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能。它服务那些只在本地适用的域名,这些域名是不会在全球的DNS服务器中出现的。DHCP服务器和DNS服务器结合,并且允许DHCP分配的地址能在DNS中正常解析,而这些DHCP分配的地址和相关命令可以配置到每台主机中,也可以配置到一台核心设备中(比如路由器),DNSmasq支持静态和动态两种DHCP配置方式。

安装

1
sudo apt-get install dnsmasq

配置
修改/etc/dnsmasq.conf文件

1
sudo vi /etc/dnsmasq.conf

这个文件配置比较大,但是都注释了
这里指定一下接口,配置一下dhcp分配的ip范围,在末尾加上:

1
2
3
interface=wlan0
dhcp-range=192.168.0.100,192.168.0.120,255.255.255.0,12h

如需要指定DNS解析,再加上:

1
addn-hosts=/etc/dnsmasq.hosts  

然后创建/etc/dnsmasq.hosts 文件,这里复制hosts文件

1
2
cp /etc/hosts /etc/dnsmasq.hosts

然后按照需要改内容,如:

1
192.168.0.1 raspberrypi

默认开机启动
可以查看一下:

1
systemctl status dnsmasq

2. 安装hostapd

hostapd 是一个用户态用于AP和认证服务器的守护进程。
它实现了IEEE 802.11相关的接入管理,IEEE 802.1X/WPA/WPA2/EAP 认证, RADIUS客户端,EAP服务器和RADIUS 认证服务器。Linux下支持的驱动有:Host AP,madwifi,基于mac80211的驱动。

安装

1
sudo apt-get install hostapd 

配置
创建 /etc/hostapd/hostapd.conf

1
#sudo vi /etc/hostapd/hostapd.conf

填入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
interface=wlan0
hw_mode=g
channel=10
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
rsn_pairwise=CCMP

ssid=rp3
wpa_passphrase=123456789

3. 配置接口

将无线接口wlan0的IP配置成静态地址

  1. dhcpcd不再管理wlan0,避免设置冲突

    1
    # sudo vi /etc/dhcpcd.conf

    禁用wlan0接口

    1
    denyinterfaces wlan0
  2. 给wlan0配置固定IP
    修改 /etc/network/interfaces 文件成如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    allow-hotplug wlan0
    #iface wlan0 inet dhcp
    # wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
    iface wlan0 inet static
    address 192.168.0.1
    netmask 255.255.255.0
    network 192.168.0.0
    broadcast 192.168.0.255

  3. 重启相关服务

    1
    2
    3
    4
    5
    6
    sudo service dhcpcd restart

    sudo ifdown wlan0

    sudo ifup wlan0

4 启动hostapd

1
sudo hostapd -B /etc/hostapd/hostapd.conf & > /dev/null 2>&1

如果没有问题,并且手机等设备可以连接

修改配置文件

1
sudo vi /etc/default/hostapd
1
2
3
4
5
##将##
#DAEMON_CONF=""

##修改为##
DAEMON_CONF="/etc/hostapd/hostapd.conf"

设置为开机启动

1
2
3
4
sudo systemctl enable hostapd

#查看状态
sudo systemctl status hostapd


重新使用wifi连接网络

停掉两个服务的自启动

1
2
3
4
sudo systemctl disable dnsmasq

sudo systemctl disable hostapd

关闭两个服务

1
2
3
sudo systemctl stop dnsmasq

sudo systemctl stop hostapd

启动wlan0接口的dhcpcd服务

1
2
3
4
5
sudo vi /etc/dhcpcd.conf

#注释掉如下:
#denyinterfaces wlan0

修改为获取动态IP
修改 /etc/network/interfaces 文件成如下:

1
2
3
4
5
6
7
8
9
10
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

#iface wlan0 inet static
# address 192.168.0.1
# netmask 255.255.255.0
# network 192.168.0.0
# broadcast 192.168.0.255

重启相关服务和网卡

1
2
3
4
5
6
sudo service dhcpcd restart

sudo ifdown wlan0

sudo ifup wlan0



(下面的没有测试)

配置NAT
– 这先不弄,觉得没有必要转发

修改/etc/sysctl.conf,更改(如果有这一行,把#号去掉就行)

1
2
3
4
5
6
net.ipv4.ip_forward=1


#替换命令
sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf

通过iptables做NAT转发:

1
2
3
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

关于

Apache HTTP Server是一个为包括UNIX和Windows在内的现代操作系统努力开发和维护的开源HTTP服务器项目。这个项目的目标是提供一个安全,高效和可扩展的服务器,提供与当前HTTP标准同步的HTTP服务。
Apache HTTP服务器(“httpd”)于1995年推出,它自1996年4月以来一直是互联网上最受欢迎的Web服务器。它于2015年2月庆祝了其20岁生日。
Apache HTTP Server是Apache Software Foundation的一个项目。

安装

这里是在CentOS7 下的安装

1
2
3
4
yum -install httpd

# 会自动的安装一些依赖

配置

简单的说明一下,主要是修改:
/etc/httpd/conf/httpd.conf

1
2
3
4
5
6
7
8
ServerRoot "/etc/httpd"  #apache软件安装的位置。其它指定的目录如果没有指定绝对路径,则目录是相对于该目录

Listen 80 #服务器监听的端口号

DocumentRoot "/var/www/html" #主站点的网页存储位置

<Directory "/data/statsvn/report"> #权限,用的时候再去查

启动

1
2
3
4
5
6
systemctl start httpd

#检查
ps -ef | grep httpd

netstat -an | grep 80

配置开机启动

1
2
3
systemctl enable httpd

Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

常见CSV格式

DEFAULT 界定符( , ) 引号字符( “ ) 行结束符( \r\n ) 忽略空行

EXCEL 界定符( ; ) 引号字符( “ ) 行结束符( \r\n ) 不忽略空行

MYSQL 界定符( \t ) 引号字符( 无 ) 行结束符( \n ) 转义字符( \ ) 空字符串( \N ) 不忽略空行

RFC4180 界定符( , ) 引号字符( “ ) 行结束符( \r\n ) 不忽略空行

TDF 界定符( \t ) 引号字符( “ ) 行结束符( \r\n ) 忽略周围的空格

INFORMIX_UNLOAD 界定符( , ) 引号字符( “ ) 行结束符( \n ) 转义字符( \ )

INFORMIX_UNLOAD_CSV 界定符( , ) 引号字符( “ ) 行结束符( \n )

ES 增加字段 映射 解析器

字段与映射

获取索引

1
get http://192.168.1.91:9200/mmx2/_mapping/p1

为已经存在的索引添加一个新的字段

1
2
3
4
5
6
7
8
9
put http://192.168.1.91:9200/dnd-类型1/_mapping/dndata

{
"properties": {
"user_name": {
"type": "String"
}
}
}

对一个字段提供多种索引模式,同一个字段的值,一个分词,一个不分词

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"properties": {
"state": {
"type": "string",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}

字段索引两次使用不的解析器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
PUT /my_index
{
"settings": { "number_of_shards": 1 },
"mappings": {
"my_type": {
"properties": {
"title": {
"type": "string",
"analyzer": "english",
"fields": {
"std": {
"type": "string",
"analyzer": "standard"
}
}
}
}
}
}
}

为字段配置一个特定的解析器

1
2
3
4
5
6
7
8
9
10
11
12
PUT /my_index/_mapping/my_type

{
"my_type": {
"properties": {
"english_title": {
"type": "string",
"analyzer": "english"
}
}
}
}

自定义_all字段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
PUT /my_index
{
"mappings": {
"person": {
"properties": {
"first_name": {
"type": "string",
"copy_to": "full_name"
},
"last_name": {
"type": "string",
"copy_to": "full_name"
},
"full_name": {
"type": "string"
}
}
}
}
}

ES通过字段映射中的copy_to参数将值复制到其他字段,在first_name和last_name字段中的值会被拷贝到full_name字段中。first_name和last_name字段的映射和full_name字段的索引方式的无关。full_name字段会从其它两个字段中拷贝字符串的值,然后仅根据full_name字段自身的映射进行索引。

1

解析器

解析器可以在几个级别被指定。ES会依次检查每个级别直到它找到了一个可用的解析器。在索引期间,检查的顺序是这样的:

  • 定义在字段映射中的analyzer
  • 文档的_analyzer字段中定义的解析器
  • type默认的analyzer,它的默认值是
  • 在索引设置(Index Settings)中名为default的解析器,它的默认值是
  • 节点上名为default的解析器,它的默认值是
  • standard解析器

在搜索期间,顺序稍微有所不同:

  • 直接定义在查询中的analyzer
  • 定义在字段映射中的analyzer
  • type默认的analyzer,它的默认值是
  • 在索引设置(Index Settings)中名为default的解析器,它的默认值是
  • 节点上名为default的解析器,它的默认值是
  • standard解析器

以上两个点表示的项目突出显示了索引期间和搜索期间顺序的不同之处。_analyzer字段允许你能够为每份文档指定一个默认的解析器(比如,english,french,spanish),而查询中的analyzer参数则让你能够指定查询字符串使用的解析器。然而,这并不是在一个索引中处理多语言的最佳方案,因为在处理自然语言中提到的一些陷阱。

JAX-RS

JAX-RS: Java API for RESTful Web Services是一个Java编程语言的应用程序接口,支持按照 表象化状态转变 (REST)架构风格创建Web服务。JAX-RS使用了 ++Java SE 5++ 引入的Java 标注来简化Web服务客户端和服务端的开发和部署。

规范内容

JAX-RS提供了一些标注将一个资源类,一个POJOJava类,封装为Web资源。标注包括:

  • @Path,标注资源类或方法的相对路径
  • @GET,@PUT,@POST,@DELETE,标注方法是用的HTTP请求的类型
  • @Produces,标注返回的MIME媒体类型
  • @Consumes,标注可接受请求的MIME媒体类型
  • @PathParam,@QueryParam,@HeaderParam,@CookieParam,@MatrixParam,@FormParam,分别标注方法的参数来自于HTTP请求的不同位置,例如@PathParam来自于URL的路径,@QueryParam来自于URL的查询参数,@HeaderParam来自于HTTP请求的头信息,@CookieParam来自于HTTP请求的Cookie。

JAX-RS的实现

  • Apache CXF,开源的Web服务框架。
  • Jersey, 由Sun提供的JAX-RS的参考实现。
  • RESTEasy,JBoss的实现。
  • Restlet,由Jerome Louvel和Dave Pawson开发,是最早的REST框架,先于JAX-RS出现。
  • Apache Wink,一个Apache软件基金会孵化器中的项目,其服务模块实现JAX-RS规范

说明

Java EE 6 引入了对 JSR-311 的支持。JSR-311(JAX-RS:Java API for RESTful Web Services)旨在定义一个统一的规范,使得 Java 程序员可以使用一套固定的接口来开发 REST 应用,避免了依赖于第三方框架。同时,JAX-RS 使用 POJO 编程模型和基于标注的配置,并集成了 JAXB,从而可以有效缩短 REST 应用的开发周期。

JAX-RS 定义的 API 位于 javax.ws.rs 包中。

JAX-RS 的具体实现由第三方提供,例如 Sun 的参考实现 Jersey、Apache 的 CXF 以及 JBoss 的 RESTEasy。

0%