关注小众语言、AI技术,记录、分享技术点滴!

0%

今天在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’根本原因是执行了该脚本

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

解决方式

1
$ unset SSH_ASKPASS

再次执行git

1
$ git push origin master

不再提示错误。

最近,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用户登录,运行以下命令:

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ 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 系统,执行如下命令即可升级内核:

1
2
3
$ 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 的话,执行命令:

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

CentOS 7 的话,执行命令:

1
$ grub2-set-default 0

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

1
$ mount -o remount rw /

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

1
2
3
4
5
$ 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

1、安装gcc和gcc-c++

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

#或者

1
$ yum groupinstall "Development Tools"

#或者

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

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

1
2
3
4
$ yum downgrade libgomp
$ yum downgrade libstdc++
$ yum downgrade libgcc
$ yum downgrade cpp

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

1、下载安装包

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

2、卸载系统自带的git

1
$ yum remove git

3、安装必要的依赖包

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

4、编译安装

1
2
3
4
5
$ tar -zxvf git-2.13.2.tar.gz
$ cd git-2.13.2
$ ./configure
$ make
$ make install

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

1
2
3
$ ln -s /usr/local/bin/git /usr/bin/git
$ git --version
git version 2.13.2

到此安装完成

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

1
yum -y install libjpeg-devel freetype-devel

2、下载安装包

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

3、编译安装

1
2
3
4
5
$ unzip ImageMagick-6.9.8-6.zip
$ cd ImageMagick-6.9.8-6
$ ./configure
$ make
$ make install

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

1
$ wget -O luajit2-2.1-20200102.tar.gz https://github.com/openresty/luajit2/archive/v2.1-20200102.tar.gz

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

2、编译安装

1
2
3
4
$ tar zxvf LuaJIT-2.0.4.tar.gz
$ cd LuaJIT-2.0.4
$ make
$ make install

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

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

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

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

2、编译安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ 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工具(如果已经存在,请跳过)

1
$ yum install -y cmake

完成

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

1
2
3
4
$ 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问题

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

1
yum -y  upgrade device-mapper-libs

瞬间解决了。

ps 系统环境如下:

1
2
3
4
5
6
$ cat /etc/issue
CentOS release 6.5 (Final)
Kernel \r on an \m

$ uname -r
2.6.32-431.23.3.el6.x86_64

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

1
$ yum install openssh-server -y

2、修改配置

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

修改root密码

1
passwd

重启sshd

1
service sshd start

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

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

/home/save.tar

使用scp将save.tar拷到机器b上,然后:
$ docker load < /home/save.tar

把容器转成文件:
$ docker export > /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在当前路径
$ 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>

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

想要删除untagged images,也就是那些id为的image的话可以用
$ docker rmi $(docker images | grep “^” | awk “{print $3}”)

要删除全部image的话
$ docker rmi $(docker images -q)

直接删除带none的镜像
$ docker rmi $(docker images | grep “none” | awk ‘{print $3}’)

21.登录镜像仓库
$ docker login -u [你的仓库帐号] -p [你的仓库密码] -e Email 仓库地址
Login Succeded

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

23.推送至镜像仓库
$ docker push 仓库地址/[你的用户名]/[标签名]

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

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

二、docker参数说明
1、指定docker镜像和容器存储路径

1
--graph=/data/docker

2、指定默认的系统ulimit值

1
--default-ulimit nproc=65535

三、docker命令说明

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
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等等

mysql启动时出现mysqld_safe: line 707: ulimit: open files: cannot modify limit: Operation not permitted错误
解决方法:

1
ulimit -n 65535

普通用户ssh连接linux服务器是总是提示:

1
ulimit: open files: cannot modify limit: Operation not permitted

解决方法:

1
2
3
4
5
6
7
8
9
10
11
$ vi /etc/security/limits.conf
# End of file
#添加以下内容:
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535

#优化内核时:
* soft nproc 65535
* hard nproc 65535

重启系统