Debian/Ubuntu 下 Nginx+Lua 环境搭建

前言

  • 关于lua的特性不再赘述;
  • 以下步骤均使用了apt-get进行操作,免去了诸如ng-lua组件手动加载等繁琐的步骤,妄图使用其他方式安装的请移步官方文档:https://github.com/openresty/lua-nginx-module#installation
  • lua在web上基于lua-nginx-module运作,目前还没有Apache的支持组件,所以妄图使用Apache的可以撤了;

本人环境供参考:

Distributor ID: Debian
Description:    Debian GNU/Linux 8.8 (jessie)
Release:    8.8
Codename:   jessie

注:不确定wheezy版本的Linux下luajit是否可用。

搭建步骤

1、首先确定自己的APT源是否可用,是否足够新.

本人最开始使用了一个较为老旧的dotdeb版本,导致apt-cache查询不到lua-nginx-module,甚至一度尝试手动加载该模块,由此浪费了许多时间;
本人使用的apt source list供参考:

sudo vi /etc/apt/sources.list

>
deb http://mirrors.aliyun.com/dotdeb jessie all
deb http://mirrors.aliyun.com/debian jessie main contrib non-free
deb http://mirrors.aliyun.com/debian jessie-updates main contrib non-free
deb http://mirrors.aliyun.com/debian-security jessie/updates main contrib non-free

需要注意的是:添加源的时候需要注意完整性,本人最开始图省事,仅用了一个all,发现apt并不能找到luajit模块,又浪费了很多时间。

2、没有nginx的先安装nginx;

不再赘述

sudo apt-get install nginx-full

3、安装lua及相关组件

不再赘述

apt-get install lua5.2 lua5.2-doc liblua5.2-dev

4、安装luajit

sudo apt-get install luajit

关于JIT :

通常,程序有两种运行方式:静态编译与动态直译。
静态编译的程序在执行前全部被翻译为机器码,而动态直译执行的则是一句一句边运行边翻译。
即时编译(Just-In-Time Compiler)则混合了这二者,一句一句编译源代码,但是会将翻译过的代码缓存起来以降低性能损耗。

此外,使用luajit可以大大提高lua的运行效率,由此也被官方钦定。

It is highly recommended to use OpenResty releases which integrate Nginx, ngx_lua, LuaJIT 2.1, as well as other powerful companion Nginx modules and Lua libraries.

5、安装nginx的lua模块 lua-nginx-module

sudo apt-get install libnginx-mod-http-lua

需要注意的是:如果前面apt源不够新或不够全,很可能会在安装此模块的时候出现找不到luajit依赖项的情况,此时请寻找新的可靠的源并确保完整性,不要在这里浪费时间。

6、配置nginx

nginx的配置中,核心在于content_by_lua_file。

关于 content_by_lua_file 的官方文档: https://github.com/openresty/lua-nginx-module#content_by_lua_file

本人的配置代码供参考:

server {
            listen 80;
            server_name ebid.xxxx.com;
            root /home/separes/xxx;

            location / {
                    lua_code_cache off;  // 缓存
                    content_by_lua_file /home/separes/xxx/index.o;
            }
}

需要注意的是:这里的nginx缓存是默认开启的,推荐调试及开发环境中手动关闭 lua_code_cache。

7、其它

这里推荐几个组件

// cjson
sudo apt-get install lua-cjson

// lyaml
sudo luarocks install lyaml

// dbi
sudo luarocks install luadbi-mysql MYSQL_INCDIR=/usr/include/mysql
//实测后面必须指定MYSQL路径,指向系统中的mysql根目录,匹配mysql.c文件

需要注意的是,使用 luarocks/apt-get 安装或升级 lua-DBI 的时候,需要注意新版本的DBI并不完全向下兼容,其中dbi参数由全局变量改为了局部变量,如果在以前的代码中使用过,需要重新进行声明,否则该参数会报错。

文档:

Lua官方文档: https://www.lua.org/manual/5.3

lua-nginx-module官方文档: https://github.com/openresty/lua-nginx-module

环境搭建至此为止。

ubuntu14.04升级php curl,支持http2发送APNs

网上升级很多都不完整,不是这里出错就是那里出错。

遇到的问题是:

一、首先升级curl,这个比较容易,虽然支持http2,但是利用命令发送不了APNs的消息,明明支持http2,可以发送消息的头部依然是http/1.1。找了很多资料,需要升级openssl

二、升级openssl也容易,但是编译了很多次,curl -V查看版本的时候,openssl依然是老版本

总结问题,要cURL支持http2,必须满足openssl >= 1.0.2 , cURL >= 7.46.0

安装库文件

sudo apt-get install g++ make binutils autoconf automake git autotools-dev libtool pkg-config zlib1g-dev libcunit1-dev libxml2-dev libev-dev libevent-dev libssl-dev libjansson-dev libjemalloc-dev cython python3-dev python-setuptools

1、升级openssl

sudo add-apt-repository ppa:0k53d-karl-f830m/openssl

sudo apt-get update

sudo apt-get install openssl

2、安装nghttp2

git clone https://github.com/tatsuhiro-t/nghttp2.git

cd nghttp2

autoreconf -i

automake

autoconf

./configure

make

sudo make install

3、升级curl

sudo apt-get build-dep curl

wget https://curl.haxx.se/download/curl-7.55.1.tar.gz

tar zxvf curl-7.55.1.tar.gz

cd curl-7.55.1

./configure --prefix=/usr/local --with-nghttp2=/usr/local --with-ssl

make -s && sudo make install

sudo ldconfig

4、升级php5-curl

apt-get remove php5-curl

apt-get install php5-curl

php5enmod curl

service apache2 restart

Ubuntu 16.04 安装 Jenkins

安装、启动并配置jenkins服务

wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins
systemctl status jenkins.service
● jenkins.service - LSB: Start Jenkins at boot time
Loaded: loaded (/etc/init.d/jenkins; bad; vendor preset: enabled)
Active: failed (Result: exit-code) since 一 2017-09-18 20:02:02 CST; 5min ago

 Docs: man:systemd-sysv-generator(8)

9月 18 20:02:02 DH9K45ER2 systemd[1]: Starting LSB: Start Jenkins at boot time...
9月 18 20:02:02 DH9K45ER2 jenkins[4785]: ERROR: No Java executable found in current PATH: /bin:/usr/bin:/sbin:/usr/sbin
9月 18 20:02:02 DH9K45ER2 jenkins[4785]: If you actually have java installed on the system make sure the executable is in the aforementioned path and that 't
9月 18 20:02:02 DH9K45ER2 systemd[1]: jenkins.service: Control process exited, code=exited status=1
9月 18 20:02:02 DH9K45ER2 systemd[1]: Failed to start LSB: Start Jenkins at boot time.
9月 18 20:02:02 DH9K45ER2 systemd[1]: jenkins.service: Unit entered failed state.
9月 18 20:02:02 DH9K45ER2 systemd[1]: jenkins.service: Failed with result 'exit-code'.
cat /etc/services | grep 8080 
http-alt 8080/tcp webcache # WWW caching service
http-alt 8080/udp

从日志看出Jenkins在默认情况下从8080端口启动。在这个系统端口中,8080已经在使用中了。所以在/etc/default/jenkins.修改Jenkins默认端口设置

修改/etc/default/目录下面的jenkins文件,将以下内容

# port for HTTP connector (default 8080; disable with -1)
HTTP_PORT=8080

修改为:

# port for HTTP connector (default 8080; disable with -1)
HTTP_PORT=8089

启动停止Jenkins

sudo service jenkins start
sudo service jenkins stop

访问路径:http://localhost:8089

其他说明

  • 安装路径:/var/lib/jenkins
  • 日志路径:/var/log/jenkins/jenkins.log

Jenkins初始化配置

1、解锁Jenkins

这里需要/var/lib/jenkins/secrets/initialAdminPassword的密码解锁Jenkins
然后把密码复制进去。

说明:按照弹框提示,找到该initialAdminPassword文件,我这里使用Docker启动Jenkins,并且把jenkins_home目录挂载到我磁盘指定目录,所以这里我只需要复制/Users/wanyang3/jenkins_home/initialAdminPassword即可,如果非挂载方式Docker启动,则需要进入容器内根据提示路径找到该文件。

2、定制 Jenkins

说明:这里若选择Install suggested plugins安装,那么jenkins就会给你推荐安装一些很有用的插件,若选择Select plugins to install安装,那么就需要自己根据业务需要选择性安装某些插件。

3、创建第一个管理员用户

说明:这里创建第一个管理员用户,也可以不设置,直接点击“Continue as admin”,进入jenkins以后再设置。

新建Pipeline Job Demo

创建一个pipeline job

/var/lib/jenkins/config.xml
<useSecurity>true</useSecurity>
<authorizationStrategy class="hudson.security.GlobalMatrixAuthorizationSt
rategy">

<permission>hudson.model.Computer.Configure:admin</permission> 
<permission>hudson.model.Computer.Connect:admin</permission> 
<permission>hudson.model.Computer.Create:admin</permission>
<permission>hudson.model.Computer.Delete:admin</permission>
<permission>hudson.model.Computer.Disconnect:admin</permission> 
<permission>hudson.model.Hudson.Administer:admin</permission> 
<permission>hudson.model.Hudson.Read:admin</permission> 
<permission>hudson.model.Hudson.Read:anonymous</permission> 
<permission>hudson.model.Hudson.RunScripts:admin</permission> 
<permission>hudson.model.Item.Build:admin</permission> 
<permission>hudson.model.Item.Cancel:admin</permission> 
<permission>hudson.model.Item.Configure:admin</permission> 
<permission>hudson.model.Item.Create:admin</permission> 
<permission>hudson.model.Item.Delete:admin</permission> 
<permission>hudson.model.Item.Discover:admin</permission> 
<permission>hudson.model.Item.Read:admin</permission> 
<permission>hudson.model.Item.Workspace:admin</permission> 
<permission>hudson.model.Run.Delete:admin</permission> 
<permission>hudson.model.Run.Update:admin</permission> 
<permission>hudson.model.View.Configure:admin</permission> 
<permission>hudson.model.View.Create:admin</permission> 
<permission>hudson.model.View.Delete:admin</permission> 
<permission>hudson.model.View.Read:admin</permission> 
<permission>hudson.scm.SCM.Tag:admin</permission> 
</authorizationStrategy> 

</authorizationStrategy>
<securityRealm class="hudson.security.HudsonPrivateSecurityRealm">

<disableSignup>false</disableSignup> 
<enableCaptcha>false</enableCaptcha> 

修改用户密码

/var/lib/jenkins/users/user/config.xml
<hudson.security.HudsonPrivateSecurityRealm_-Details>
<passwordHash>#jbcrypt:$2a$10$DdaWzN64JgUtLdvxWIflcuQu2fgrrMSAMabF5TSrGK5nXitqK9ZMS</passwordHash>
</hudson.security.HudsonPrivateSecurityRealm_-Details>

注:密码为111111

ubuntu17.04使用systemd设置开机启动

ubuntu从16.04开始不再使用initd管理系统,改用systemd。
然而systemd很难用,刚开始接触有点烦,改变太大,跟之前的完全不同。

吐槽完开始正题:

使用systemd设置开机启动

为了像以前一样,在/etc/rc.local中设置开机启动程序,需要以下几步:

1、systemd默认读取/etc/systemd/system下的配置文件,该目录下的文件会链接/lib/systemd/system/下的文件。一般系统安装完/lib/systemd/system/下会有rc-local.service文件,即我们需要的配置文件。

链接过来:

ln -fs /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service
cd /etc/systemd/system/
vim rc-local.service

rc-local.service内容:

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.local is executable.
[Unit]
Description=/etc/rc.local Compatibility
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

[Install]
WantedBy=multi-user.target
Alias=rc-local.service

2、创建/etc/rc.local文件

touch /etc/rc.local

3、赋可执行权限

chmod 755 /etc/rc.local

4、编辑rc.local,添加需要开机启动的任务

#!/bin/bash

echo "test test " > /var/test_boot_up.log

5、执行reboot重启系统验证OK。

最后,说一下/etc/systemd/system/下的配置文件(XXXX.service),
其中有三个配置项,[Unit] / [Service] / [Install]

  • [Unit] 区块:启动顺序与依赖关系。
  • [Service] 区块:启动行为,如何启动,启动类型。
  • [Install] 区块,定义如何安装这个配置文件,即怎样做到开机启动。

Debian/Ubuntu 更新内核开启 TCP BBR 拥塞控制算法

BBR (Bottleneck Bandwidth and RTT) 是 Google 提供的 TCP 拥塞控制算法,适用于复杂网络环境下的 TCP 加速。

首先需要准备的条件

  • Debian 8.x 或者 Debian 9.x 系统,当然也适合 Ubuntu 14.04 或 Ubuntu 16.04
  • 如果是虚拟机,那么得使用 KVM 或 Xen 等可以修改内核的平台
  • 如果不是新的机器,请事先做好备份,因为内核万一挂了机器启动不起来是一件及其麻烦的事情

升级内核

BBR 只支持 4.9.x 以上的内核,所以我们需要更新升级以下

如果你使用的是 Debian 9.x,那么这一步可以直接跳过,其他三个内核版本较旧的系统,我们可以使用 Ubuntu 打包好的内核安装包

首先,找到 4.9.x 以上版本的稳定内核,这里我们推荐使用 LTS 版本,目前最新的是 4.9.40 下载安装即可

mkdir kernel-tmp && cd kernel-tmp
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9.40/linux-headers-4.9.40-040940_4.9.40-040940.201707271932_all.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9.40/linux-headers-4.9.40-040940-generic_4.9.40-040940.201707271932_amd64.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9.40/linux-image-4.9.40-040940-generic_4.9.40-040940.201707271932_amd64.deb
sudo dpkg -i *.deb

安装完以后直接 reboot 重启,一切顺利的话请检查以下当前的内核版本

root@debian ~ # uname -r
4.9.0-3-amd64

写入配置文件

直接修改 /etc/sysctl.conf 文件即可

cat >> /etc/sysctl.conf << EOF
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF

然后使用 sysctl -p 命令让内核配置生效,不出意外,应该会提示

root@debian ~ # sysctl -p
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

此时可以使用 lsmod | grep bbr 命令检查 BBR 是否已正确开启

root@debian ~ # lsmod | grep bbr
tcp_bbr                16384  61

如果出现 tcp_bbr 字样则说明没有问题。

Ubuntu 14.04下适应Docker搭建solrCloud集群

主要内容:

技术关键点:docker17.06.3安装,docker自制镜像及相关容器操作,docker分配固定IP及添加端口映射,solrCloud集群部署等

主要思路:在Ubuntu14.04操作系统的宿主机中,安装docker17.06.3,将宿主机的操作系统制作成docker基础镜像,之后使用自制的基础镜像在docker中启动3个容器,分配固定IP,再在3个容器中配置solrCloud集群。

注:solrCloud采用的solr内置jetty,需要单独配置zookeeper
容器IP及名称见下表:

编号    静态IP        容器名称

1      172.18.0.11   server1
2      172.18.0.12   server2
3      172.18.0.13   server3

一、在宿主机安装docker最新版

1、更新apt-get

apt-get update

2、安装curl工具

apt-get install curl

3、获取并安装docker最新版

curl -fsSL https://get.docker.com/ | sh

4、查看docker版本

docker -v

未分类

二、在宿主机制作Ubuntu14.10基础镜像ubuntu-self

1、将本机操作系统打包成tar文件

tar --numeric-owner --exclude=/proc --exclude=/sys -cvf ubuntu-self.tar /

未分类

2、将制作的tar文件导入docker镜像库中,并命令为:ubuntu-self:

cat ubuntu-self.tar | docker import - ubuntu-self

3、现在可以运行它了:

docker run -i -t ubuntu-self 

注:官方提供的镜像库中Ubuntu无法sudo,不太好用,这里我自己利用本机的操作系统生成了一个基础纯净版镜像,命名为ubuntu-self,大小约3.5G,里面没有安装任何软件。

三、配置宿主机的hosts文件,以便利用ssh登录容器

1、修改hosts文件,添加如下内容:

vi /etc/hosts
172.18.0.11 server1
172.18.0.12 server2
172.18.0.13 server3

2、查看hosts文件

cat /etc/hosts

未分类

四、启动一个容器,设置静态IP,命名为server1

1、在宿主机上创建自定义网络

docker network create --subnet=172.18.0.0/16 search_network

备注:这里选取了172.18.0.0网段,也可以指定其他任意空闲的网段,search_network为自定义网桥的名字,可自己任意取名。

2、利用docker启动容器server1,分配固定IP 172.18.0.11,并将容器的8983端口与宿主机8983进行映射,以便可以从外部访问容器

docker run -itd --name server1 --net search_network --ip 172.18.0.11 -p 8983:8983 ubuntu-self /bin/bash

注:该命令执行完之后直接进入到server1的命令行界面,主机名称变为docker分配的随机字符串,查看ip是否为静态,执行结果如下图所示:

未分类

五、继续操作,在容器server1中配置ssh服务

1、aptget升级

apt-get update

2、安装openssh服务

apt-get install openssh-server

3、开启ssh服务

sudo /etc/init.d/ssh start

4、设置ssh开机启动

vi /etc/rc.local

添加如下内容:

service ssh start

5、退出容器,在宿主机中采用ssh登录

exit

未分类

6、在宿主机切换到tank用户(root登录ssh需要修改ssh配置文件,这里用tank用户登录更方便些),并ssh到容器server1

su tank
ssh server1

未分类

六、在容器server1中安装jdk1.8并配置java环境变量

1、解压缩文件

tar -zxvf jdk1.8.0_141.tar.gz -C /usr/local/java/

2、向/etc/profile文件中追加下面内容:

export JAVA_HOME=/usr/local/java/jdk1.8.0_141
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=$PATH:${JAVA_HOME}/bin

3、让文件生效

source /etc/profile

4、验证java成功安装

java -version

未分类

七、在容器server1中安装配置zookeeper-3.4.10

1、解压zookeeper 安装包到/usr/local目录中

tar -zxvf zookeeper-3.4.10.tar.gz -C /usr/local/

2、创建zookeeper的data和logs目录,确保拥有读写权限

mkdir /home/tank/zookeeper/data
mkdir /home/tank/zookeeper/log

3、将zookeeper安装目录下conf文件夹中的zoo_sample.cfg重命名为zoo.cfg

未分类

4、修改zoo.cfg内容,zoo.cfg配置完后如下:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/home/tank/zookeeper/data
dataLogDir=/home/tank/zookeeper/log
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=172.18.0.11:2888:3888
server.2=172.18.0.12:2888:3888
server.3=172.18.0.13:2888:3888

5、进入/home/tank/zookeeper/data中,新建myid文件,写入1

未分类

注:其他两个节点的myid内容应分别是2和3

八、在容器server1中安装配置solr-6.6.0

1、解压solr-6.6.0.tgz到/usr/local目录下

tar -zxvf solr-6.6.0.tgz -C /usr/local/

未分类

2、创建solrCloud根目录solr_cloud_home文件夹

mkdir /usr/local/solrCloud/solr_cloud_home

3、复制/usr/local/solr-6.6.0/server/solr/目录下的文件到

solr_cloud_home中
cp /usr/local/solr-6.6.0/server/solr/* /usr/local/solrCloud/solr_cloud_home/

查看solr_cloud_home目录,如图所示:

ls

未分类

4、创建配置存放目录solr_cloud_collection文件夹

mkdir /usr/local/solrCloud/solr_cloud_collection

5、复制/usr/local/solr-6.6.0/example/example-DIH/solr/solr/目录下的文件到solr_cloud_collection/cloud_core中

mkdir /usr/local/solr_cloud_collection/cloud_core
cp /usr/local/solr-6.6.0/example/example-DIH/solr/solr/* /usr/local/solr_cloud_collection/cloud_core/
ls

未分类

九、在宿主机提交容器server1为新的镜像,命名为ubuntu-self-solr

sudo docker commit server1 ubuntu-self-solr
docker images

未分类

十、利用上一步生成的镜像启动容器server2,server3

1、在宿主机启动容器server2,设置IP为172.18.0.12

docker run -itd --name server2 --net search_network --ip 172.18.0.12 ubuntu-self-solr /bin/bash

2、将容器server2中/home/tank/zookeeper/data/myid内容由1改为2

3、退出容器server2,回到宿主机

exit

4、在宿主机启动容器server3,设置IP为172.18.0.13

docker run -itd --name server3 --net search_network --ip 172.18.0.13 ubuntu-self-solr /bin/bash

5、将容器server3中/home/tank/zookeeper/data/myid内容由1改为3

6、退出容器server3,回到宿主机

exit

7、在宿主机中查看docker容器运行情况

docker ps

未分类

十一、在宿主机ssh登录容器server1,server2,server3 并分别启动zookeeper

ssh server1
cd /usr/local/zookeeper-3.4.10/
bin/zkServer.sh start
/usr/local/zookeeper-3.4.10/bin/zkServer.sh start

未分类

注:在server2,server3上同样执行此操作

十二、在宿主机ssh登录容器server1,server2,server3并启动solr

1、ssh登录server1,cloud模式下启动solr

ssh server1
cd /usr/local/solr-6.6.0
bin/solr start -cloud -p 8983 -s "/usr/local/solrCloud/solr_cloud_home/" -z "172.18.0.11:2181,172.18.0.12:2181,172.18.0.13:2181"

未分类

2、打开宿主机浏览器,访问页面http://172.18.0.11:8983/solr/,可以进入solr页面即代表启动成功

注:在server2,server3上同样执行此操作

十三、在容器server1上创建Collection(只需要在一台solr节点上操作)

1、由solr命令建立索引,这里索引命名为:cloudsuite_web_search
进入solr/bin目录,使用solr命令:

cd /usr/local/solr-6.6.0
bin/solr create_collection -c cloudsuite_web_search -shards 3 -replicationFactor 3 -d /usr/local/solrCloud/solr_cloud_collection/cloud_core/conf -p 8983 

-c 核心名称tar
-shards 分片数量
– replicationFactor 副本数量 (一般指有几台solr集群)

2、将solr提供的xml示例文件上传至索引

bin/post -c cloudsuite_web_search *.xml

十四、在宿主机上通过浏览器访问solrCloud集群,验证操作成功

安装成功后,无论从哪个节点访问8983端口,均可以看到cloud的拓扑模式,如下所示

未分类

Ubuntu 让 git 命令支持 Tab 键补全功能

前段时间通过网络重装方式重装了 Ubuntu,装上 git 以后发现无法自动补全(例如输入 git br 则自动补全为 git branch),通过查找发现少了一个软件包。

于是我们可以通过如下命令装上:

Debian/Ubuntu

apt install bash-completion -y

装完重新打开终端,就可以支持 git 命令自动补全了。

如何在CentOS和Ubuntu中安装Linux Kernel 4.13

未分类

Linus Torvalds 在 9 月 3 日星期天正式发布了稳定版 Linux Kernel 4.13,这个最新版本发布了新功能,进行了诸多修复和问题改进。有关更多详细信息,请参阅: http://lkml.iu.edu/hypermail/linux/kernel/1709.0/01021.html

下面系统极客将向大家介绍在 CentOS 和 Ubuntu 中手动安装、更新 Linux Kernel 4.13 的方法,当然,这些步骤也同时适用于其它基于 YUM 和基于 APT 的系统。

CentOS系统安装Linux Kernel 4.13

以下步骤在 CentOS 7 64 位版本中进行了测试,它也适用于其他 RPM 发行版,如:RHEL、Fedora 和 Scientific Linux 等。

由于最新的内核在官方存储库中目前还不可用, 所以我们需要添加 ELRepo 仓库来安装这个最新的 Linux Kernel 4.13 内核。

1、使用如下命令添加 ELRepo GPG 密钥:

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

2、使用如下命令在 CentOS 7、RHEL 7 或 Scientific Linux 7 中添加 ELRepo 存储库:

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

CentOS 6、RHEL 6、Scientific Linux 6 添加 ELRepo 存储库的命令是:

rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm

3、使用如下命令将 ELRepo 启用为最快镜像:

yum install yum-plugin-fastestmirror

4、启用 ELRepo 并使用如下命令安装 Linux Kernel 4.13 版本:

yum --enablerepo=elrepo-kernel install kernel-ml

5、安装内核后,重新启动系统并从 Grub 启动菜单中选择最新的内核。

Ubuntu 16.04 LTS系统安装Linux Kernel 4.13

在 Ubuntu 16.04 LTS 或其它基于 Ubuntu 的系统中(如 Debian、Linux Mint 等 )安装最新 Linux Kernel 4.13 内核的步骤如下:

1、现在已经可以从 Ubuntu 官方内核库中下载 Linux Kernel 4.13。

64 位 Ubuntu 系统:

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.13/linux-headers-4.13.0-041300_4.13.0-041300.201709031731_all.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.13/linux-headers-4.13.0-041300-generic_4.13.0-041300.201709031731_amd64.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.13/linux-image-4.13.0-041300-generic_4.13.0-041300.201709031731_amd64.deb

32 位 Ubuntu 系统:

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.13/linux-headers-4.13.0-041300_4.13.0-041300.201709031731_all.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.13/linux-headers-4.13.0-041300-generic_4.13.0-041300.201709031731_i386.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.13/linux-image-4.13.0-041300-generic_4.13.0-041300.201709031731_i386.deb

2、下载完成后使用如下命令安装 Linux Kernel 4.13:

sudo dpkg -i *.deb

3、使用如下命令更新 Grub 引导加载程序:

sudo update-grub

如果使用 BURG 引导加载程序,请运行:

sudo update-burg

4、重新启动系统并登录到新安装的内核。

ESXi ubuntu无需重启动态增加硬盘

ESXi Ubuntu动态增加硬盘无需重启

通过增加新的磁盘来扩充根分区而不用重启系统:

第一步是打开您的虚拟机客户端的设置页面,点击 ‘增加’ 按纽,然后继续下一步操作。

未分类

选择新磁盘所需要的配置信息,如下图所示的,选择新磁盘的大小和它的类型。

未分类

然后进入服务端重复如下的命令来扫描您的磁盘设备,以使新磁盘在系统中可见。

for i in `ls /sys/class/scsi_host/*/scan`;do echo "- - -" > $i;done

列出您的 SCSI 设备的名称并设置值:

for i in `ls /sys/class/scsi_device/*/device/rescan`;do echo 1 > $i;done

fdisk -l

未分类

一旦新增的磁盘可见,就可以运行下面的命令来创建新的分区;

fdisk /dev/sdb --->n-->1-->2048-->p-->w
mkfs -t ext4 /dev/sdb
mkdir /data
mount -t ext4 /dev/sdb /data(挂载)

得到到/dev/sdb这个分区的UUID使用命令:blkid /dev/sdb

cat << EOF >> /etc/fstab
UUID="f7dbec85-ec1e-4291-bf91-73587dc81855"/data ext4 defaults 0 0
EOF