CentOS 安装(升级) OpenSSL

CentOS 6.x(7.x) 的 OpenSSL 软件版本实在是低,2017 年了还在用人家 2013 年的版本,而且 1.0.1 版本对 ALPN 不支持,已经没法跟上大环境的节奏了
可以看一下默认自带的版本

# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013

所以我们有必要升级 OpenSSL 到 1.0.2 版本
以下所有操作均需在 root 用户下进行
1、安装必要软件

yum install gcc gcc-c++ autoconf automake zlib zlib-devel pcre-devel

2、下载并解压 OpenSSL

cd /usr/local/src
wget https://www.openssl.org/source/openssl-1.0.2-latest.tar.gz
tar -zxf openssl-1.0.2-latest.tar.gz

3、编译安装 OpenSSL

cd openssl-1.0.2*
./config
make && make install

4、移除旧版本 OpenSSL

mv /usr/bin/openssl /tmp/
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl

好了,大功告成,查看一下现在的版本

# openssl version
OpenSSL 1.0.2m  26 Jan 2017

一个git的使用错误unable to read askpass

今天在git push origin master时,竟然出现了错误 (gnome-ssh-askpass:32737): Gtk-WARNING **: cannot open display: error: unable to read askpass response from ‘/usr/libexec/openssh/gnome-ssh-askpass’根本原因是执行了该脚本

$ cat /etc/profile.d/gnome-ssh-askpass.sh
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass

解决方式

$ unset SSH_ASKPASS

再次执行git

$ git push origin master

不再提示错误。

centos一键安装最新内核并开启BBR脚本

最近,Google 开源了其 TCP BBR 拥塞控制算法,并提交到了 Linux 内核,最新的 4.11 版内核已经用上了该算法。根据以往的传统,Google 总是先在自家的生产环境上线运用后,才会将代码开源,此次也不例外。
根据实地测试,在部署了最新版内核并开启了 TCP BBR 的机器上,网速甚至可以提升好几个数量级。
于是我根据目前三大发行版的最新内核,开发了一键安装最新内核并开启 TCP BBR 脚本。

本脚本适用环境

系统支持:CentOS 6+,Debian 7+,Ubuntu 12+
虚拟技术:OpenVZ 以外的,比如 KVM、Xen、VMware 等
内存要求:≥128M

一、关于BBR脚本

1、本脚本已在 Vultr 上的 VPS 全部测试通过。
2、当脚本检测到 VPS 的虚拟方式为 OpenVZ 时,会提示错误,并自动退出安装。
3、脚本运行完重启发现开不了机的,打开 VPS 后台控制面板的 VNC, 开机卡在 grub 引导, 手动选择内核即可。
4、由于是使用最新版系统内核,最好请勿在生产环境安装,以免产生不可预测之后果。

二、BBR脚本使用方法
使用root用户登录,运行以下命令:

$ wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh
$ chmod +x bbr.sh
$ ./bbr.sh

安装完成后,脚本会提示需要重启 VPS,输入 y 并回车后重启。
重启完成后,进入 VPS,验证一下是否成功安装最新内核并开启 TCP BBR,输入以下命令:

$ uname -r
4.13.5-1.el6.elrepo.x86_64
$ sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = bbr cubic reno
$ sysctl net.ipv4.tcp_congestion_control
net.ipv4.tcp_congestion_control = bbr
$ sysctl net.core.default_qdisc
net.core.default_qdisc = fq
$ lsmod | grep bbr
tcp_bbr                16384  10

三、内核升级方法
如果是 CentOS 系统,执行如下命令即可升级内核:

$ rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
$ rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm
$ yum --enablerepo=elrepo-kernel -y install kernel-ml kernel-ml-devel

CentOS 6 的话,执行命令:

$ sed -i 's/^default=.*/default=0/g' /boot/grub/grub.conf

CentOS 7 的话,执行命令:

$ grub2-set-default 0

特别说明
1、如果你使用的是 Google Cloud Platform (GCP)更换内核,有时会遇到重启后,整个磁盘变为只读的情况。只需执行以下命令即可恢复:

$ mount -o remount rw /

2、如果你使用的是 Linode ,那么无需更换内核,只需修改配置即可开启 BBR:

$ sed -i '/net.core.default_qdisc/d' /etc/sysctl.conf
$ sed -i '/net.ipv4.tcp_congestion_control/d' /etc/sysctl.conf
$ echo "net.core.default_qdisc = fq" >> /etc/sysctl.conf
$ echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.conf
$ sysctl -p

参考博文
https://github.com/iMeiji/shadowsocks_install/wiki/%E5%BC%80%E5%90%AFTCP-BBR%E6%8B%A5%E5%A1%9E%E6%8E%A7%E5%88%B6%E7%AE%97%E6%B3%95

https://teddysun.com/489.html

linux下使用yum安装gcc的几点心得

1、安装gcc和gcc-c++

$ yum -y install gcc
$ yum -y install gcc-c++

#或者

$ yum groupinstall "Development Tools"

#或者

$ yum install gcc gcc-c++ kernel-devel

2、yum安装包时提示libstdc++版本冲突

$ yum downgrade libgomp
$ yum downgrade libstdc++
$ yum downgrade libgcc
$ yum downgrade cpp

centos下安装git

git是当下比较流行的代码版本管理工具,开源并且免费使用。下面介绍一下安装过程。
1、下载安装包

$ wget https://www.kernel.org/pub/software/scm/git/git-2.13.2.tar.gz

2、卸载系统自带的git

yum remove git

3、安装必要的依赖包

$ yum -y install perl-devel perl-CPAN tcl tk gettext gettext-devel zlib-devel curl-devel

4、编译安装

$ tar -zxvf git-2.13.2.tar.gz
$ cd git-2.13.2
$ ./configure
$ make
$ make install

5、创建链接文件(默认情况下安装到/usr/local/bin/git)

$ ln -s /usr/local/bin/git /usr/bin/git
$ git --version
git version 2.13.2

到此安装完成

centos下安装lua-imagick插件实现图片缩放等处理

lua-imagick基于imagemagick图片处理接口,使用lua语言实现的一个模块,以下是模块编译及依赖安装。
一、imagemagick安装(lua-imagick只支持6.9.x版本)
1、下载安装包

$ wget https://www.imagemagick.org/download/ImageMagick-6.9.8-6.zip

2、编译安装

$ unzip ImageMagick-6.9.8-6.zip
$ cd ImageMagick-6.9.8-6
$ ./configure
$ make
$ make install

二、安装libluajit
1、下载安装包

$ wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz

2、编译安装

$ tar zxvf LuaJIT-2.0.4.tar.gz
$ cd LuaJIT-2.0.4
$ make
$ make install

3、下面配置luajit的环境变量(Nginx编译时需要)

$ export LUAJIT_LIB=/usr/local/lib
$ export LUAJIT_INC=/usr/local/include/luajit-2.0

三、lua-imagick模块安装
1、下载模块安装包

$ wget -O lua-imagick.zip https://codeload.github.com/isage/lua-imagick/zip/master

2、编译安装

$ unzip lua-imagick.zip
$ cd lua-imagick-master
$ cd ./src
$ cmake ..
-bash: cmake: command not found

$ make
Scanning dependencies of target imagick
[100%] Building C object CMakeFiles/imagick.dir/imagick.c.o
Linking C shared module imagick.so

$ make install
[100%] Built target imagick
Install the project...
-- Install configuration: ""
-- Installing: /usr/local/lib/lua/5.1/imagick.so
-- Removed runtime path from "/usr/local/lib/lua/5.1/imagick.so"

3、安装cmake工具(如果已经存在,请跳过)

$ yum install -y cmake

完成

启动docker报错docker: relocation error:symbol dm_task_get_info_with_deferred_remove

今天从公司一个闲置电脑上装个docker,不料安装没有那么顺利,启动docker有如下报错:

$ docker -d
WARN[0000] You are running linux kernel version 2.6.32-431.23.3.el6.x86_64, which might be unstable running docker. Please upgrade your kernel to 3.10.0. 
INFO[0000] Listening for HTTP on unix (/var/run/docker.sock) 
docker: relocation error: docker: symbol dm_task_get_info_with_deferred_remove, version Base not defined in file libdevmapper.so.1.02 with link time reference

其中警告了kernel升级,这个可以忽略,但还是建议升一下内核,最主要的问题是symbol dm_task_get_info_with_deferred_remove问题

网友提供的解决方案如下:

yum -y  upgrade device-mapper-libs

瞬间解决了。

ps 系统环境如下:

$ cat /etc/issue
CentOS release 6.5 (Final)
Kernel \r on an \m

$ uname -r
2.6.32-431.23.3.el6.x86_64

centos下安装sshd服务

sshd是linux下远程管理的一个服务。
1、安装sshd

$ yum install openssh-server -y

2、修改配置

$ vi /etc/ssh/sshd_config
PermitRootLogin yes
# 是否允许 root 登入!预设是允许的,但是建议设定成 no。
UsePAM no
# 利用 PAM 管理使用者认证有很多好处,可以记录与管理。

修改root密码

passwd

重启sshd

service sshd start

Docker 容器命令速查表

1.查看容器日志

$ docker logs -ft <容器名 or ID>  
# -f 跟踪日志输出
# -t 显示时间

2.查看容器

$ docker ps  
# 查看正在运行的容器

$ docker ps -a  
# 查看所有容器

3.查看docker镜像列表

$ docker images

4.删除某个容器

$ docker rm <容器名 or ID>  
# -f 强制性删除
# -v 删除与容器关联的卷

5.删除某个镜像

$ docker rmi ID  
# -f 强制性删除

6.停止、启动、杀死一个容器

$ docker stop <容器名 or ID>  
$ docker start <容器名 or ID>  
$ docker kill <容器名 or ID>  

7.运行一个容器

$ docker run -it temp bash

8.一个容器连接到另一个容器

$ docker run -i -t --name sonar -d -link mmysql:db   tpires/sonar-server  
sonar

9.拉取镜像

$ docker pull <ubuntu:16.04>

10.把一台机器上的镜像迁移到另一台机器的时候,需要保存镜像与加载镜像
镜像转成文件:

$ docker save <IMAGE ID> > /home/save.tar

使用scp将save.tar拷到机器b上,然后:

$ docker load < /home/save.tar

把容器转成文件:

$ docker export <CONTAINER ID> > /home/export.tar

使用scp将save.tar拷到机器b上,然后:

$ cat /home/export.tar | docker import - export:latest

注意:
一般情况下,save.tar比export.tar大一点点而已,export比较小,因为它丢失了历史和数据元metadata

11.构建自己的镜像

$ docker build -t <镜像名> <Dockerfile路径> 

如Dockerfile在当前路径

$ docker build -t Diudiu/gitlab .

12.从Container中拷贝文件出来

$ docker cp 7bb0e258aefe:/var/www/laravel/.env .

13.查看docker 存储层的变化

$ docker diff < 容器名 or ID >

14.将容器的状态保存为镜像

$ docker commit <容器名 or ID> <New镜像名>

15.查询可用镜像

$ docker search 镜像名称

16.查看一个镜像的历史记录

$ docker history ID

17.执行一个容器

$ docker exec -it 容器 bash

18.停止所有的container,这样才能够删除其中的images:

$ docker stop $(docker ps -a -q)

要kill所有正在运行的容器

docker kill $(docker ps -a -q)

要删除所有容器的话再加一个指令:

$ docker rm $(docker ps -a -q)

删除所有未打 dangling 标签的镜像

$ docker rmi $(docker images -q -f dangling=true)

19.查看当前有些什么images

$ docker images

20.删除images,通过image的id来指定删除谁

$ docker rmi <image id>

想要删除untagged images,也就是那些id为的image的话可以用

$ docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

要删除全部image的话

$ docker rmi $(docker images -q)

21.登录镜像仓库

$ docker login -u [你的仓库帐号] -p [你的仓库密码] -e Email 仓库地址
Login Succeded

22.标记本地镜像

$ docker tag [镜像名或ID] 仓库地址/[你的用户名]/[标签名]

23.推送至镜像仓库

$ docker push 仓库地址/[你的用户名]/[标签名]

docker常用命令及用法整理

一、docker配置文件
docker启动的配置参数文件

$ vim /etc/sysconfig/docker
other_args=""

二、docker参数说明
1、指定docker镜像和容器存储路径
–graph=/data/docker

2、指定默认的系统ulimit值
–default-ulimit nproc=65535

三、docker命令说明
搜索:docker search centos
下载:docker pull daocloud.io/centos:6 这里使用daocloud提供的centOs6的镜像,系统版本是6.8
查看:docker images 下载好就会出现在镜像列表里
运行:docker run -it -p 22:22
docker run -it daocloud.io/centos:6 /bin/bash
-i:允许我们对容器内的STDIN进行交互
-t:在新容器内指定一个伪终端或终端
-d:是后台运行,特别注意,后台运行而不是守护方式运行
–name:指定容器的名称,可用于管理
-P(大写):将所有公开的端口随机与宿主主机的端口进行绑定
-p(小写):将宿主机的端口和容器的端口进行绑定。例如:将容器的22端口绑定到宿主机的10022端口上-p 10022:22,也可以同时指定IP绑定-p 127.0.0.1:10022:22
-v:指定该容器挂载宿主机的目录,这样可以通过该目录来实现宿主主机与容器之间数据共享

执行:docker exec -it 容器ID /bin/bash

docker ps -l //列出最近一次启动的,且正在运行的container
docker ps -a //列出所有的container
docker commit -m “备注” 容器id 镜像名:tag版本 //执行完就生成了带sshd的镜像了

注意:先删容器再删镜像
docker rm 容器id //删除单个容器
docker rmi 镜像id //删除单个镜像
docker rm `docker ps -a -q` //删除所有容器
docker rm 容器id //删除容器id为CONTAINER_ID的容器

docker images //查看本地镜像
docker attach 容器id //启动一个已存在的docker实例
docker stop 容器id //停止docker实例(或者直接退出容器登陆;不然这个命令执行后也会强制退出容器的登陆)
docker logs 容器id //查看docker实例运行日志,确保正常运行
docker inspect 容器id //查看container的实例属性,比如ip等等