Category: LINUX


ESXi命令行升级版本与补丁

1、补丁包下载地址
https://customerconnect.vmware.com/cn/patch

2、服务器开启SSH,进入维护模式
esxcli system maintenanceMode set –enable true

3、查看当前版本及补丁信息
vmware -vl

4、查找补丁包的配置文件名称(绝对路径)
esxcli software sources profile list -d /vmfs/volumes/datastore1/data/ESXi670-20xxx.zip

5、使用包里面的 ESXi-6.7.0-20yy-standard 进行升级(绝对路径)
esxcli software profile update -p ESXi-6.7.0-20yy-standard -d /vmfs/volumes/datastore1/data/ESXi670-20xxx.zip

6、重启
reboot

7、检查版本与补丁信息,确认升级成功
vmware -vl

centos重置忘记的root密码

rhel4~6版本:
一,没有GRUB密码:
1、看到GRUB引导菜单按e进入编辑
2、滚动到”kernel…“那一行,按e编辑,在行尾添加数字1,按回车键
3、按b键引导kernel进入单用户模式
4、#passwd修改密码

二、具有GRUB密码保护:
1、通过光盘引导,在红帽引导菜单出现输入linux rescue按回车进入救援模式
2、提示启动网络设备选择”no”
3、提示在救援模式挂载已安装的LINUX根目录到/mnt/sysimage目录,选择”continue”
4、执行命令#chroot /mnt/sysimage更换根目录
5、#/usr/bin/passwd修改密码

三、使用lilo引导程序:
1、当系统进入lilo提示符,输入linux single按回车进入单用户模式
2、#passwd root
3、reboot

四、若LILO引导菜单是0秒等待时间,那就在LILO引导内核之前按下任意键打断即可。

rhle7~9版本:
一、用引导光盘boot.iso(风险最小,u推荐)
1、从光盘引导,选择Troubleshooting > Rescue a system
2、正常挂载系统盘,default
3、更换根目录#chroot /nmt/sysimage
4、#passwd root
5、reboot

二、无光盘引导
1、出现grub2菜单时按esc打断倒数计时,按e开始编辑
2、选择到“linux16″或”linuxefi”这一行,在行尾添加”rd.break”。推荐去掉本行的”rhgb quiet”字符
3、按ctrl+x引导系统
4、重新挂载系统分区为可写模式#mount -o remount,rw /sysroot
5、更换根目录#chroot /sysroot
6、更改密码#passwd
7、更改密码后SELINUX会故障,造成无法启动,需要在系统重启后重新标记所有文件SELINUX信息#touch /.autorelabel
8、退出更换根目录环境#exit
9、退出命令提示符#exit
ps:selinux重新标记文件会耗时很久,请耐心等待。

三、若磁盘容量很大,不想等SELINUX重新标记,可采取如下办法重置root密码:
1、Grub > e
2、rd.break enforcing=0 > Ctrl+x
3、mount -o remount,rw /sysroot/
4、chroot /sysroot/
5、passwd root or passwd
6、restorcon /etc/shadow
7、setenforce 1

ps:
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/ch-working_with_the_grub_2_boot_loader#sec-Changing_and_Resetting_the_Root_Password
https://docs.fedoraproject.org/en-US/Fedora/26/html/System_Administrators_Guide/sec-Changing_and_Resetting_the_Root_Password.html#proc-Resetting_the_Root_Password_Using_rd.break

TCPDUMP 捕获显示 SYN包 到达设备而没有任何ACK确认

vi /etc/sysctl.conf
net.ipv4.tcp_tw_recycle=0
net.ipv4.tcp_timestamps=0

# 生效
sysctl -p

nginx反代google

server {
listen 80;
server_name http://www.urdomain.com;

location / {
proxy_pass https://www.google.com;
proxy_redirect off;
proxy_set_header Host http://www.google.com;
proxy_set_header Accept-Encoding “”;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
sub_filter https://www.google.com http://www.urdomain.com;
sub_filter_once off;
sub_filter_types *;
}

Docker常用命令

1.检索镜像
docker search 关键字

2. 查看镜像
docker images

3.查看运行中的容器
docker ps
查看所有已经创建的容器,包括已经停止的容器
docker ps -a
用一行列出所有正在运行的container(容器多的时候非常清晰)
docker ps | less -S
列出最近一次启动的container
docker ps -l
显示一个运行的容器里面的进程信息
docker top Name/ID
查看容器内部详情细节:
docker inspect
在容器中安装新的程序
docker run image_name apt-get install -y app_name
保存对容器的修改(commit) 当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。
docker commit ID new_image_name

4.从dockerhub拉取镜像
这里以redis镜像为例,我们选择基于alpine基础镜像的版本,体积较小
docker pull redis:6.0.9-alpine3.12
参数:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

5.运行镜像(创建容器)
启动容器并启动bash(交互方式):
docker run -i -t /bin/bash
启动容器以后台方式运行(更通用的方式)
docker run -d –rm –name myredis -p 6380:6379 redis:6.0.9-alpine3.12 redis-server
参数讲解:
–detach , -d 容器后台运行,并打印容器ID
–rm 如果已经有同名的容器,移除同名容器
–name 给容器起个名字
–publish , -p 端口映射,将宿主机的端口(冒号左边)和容器内的端口(冒号右边)映射
倒数第二个参数redis:6.0.9-alpine3.12是要执行的镜像,倒数第一个参数redis-server代表要执行的具体指令

6.进入运行的容器
docker exec -i -t myredis /bin/bash
参数讲解:
–interactive , -i Keep STDIN open even if not attached打开标准输入接受用户输入命令
–tty , -t Allocate a pseudo-TTY
-d, –detach 在容器中后台执行命令;
倒数第二个参数是容器名(也可以用容器ID),倒数第一个参数是要执行的具体指令

7.停止容器运行
docker stop myredis
这里也可以使用容器ID,一次停止多个容器,可以在后面用空格分隔

8.清理已经停止的容器
docker container prune

9.删除指定镜像
docker rmi

10.将镜像保存为归档文件
docker save

11.导入镜像
docker load

12.镜像构建
docker build

13.镜像运行,就是新建并运行一个容器。
docker run [镜像ID]

14.启动已终止容器
docker start [容器ID]

15.停止运行的容器
docker stop [容器ID]

16.杀死容器进程
docker kill [容器ID]

17.重启容器
docker restart [容器ID]

18.删除容器
docker rm [容器ID]
删除所有容器
docker rm `docker ps -a -q`

19.导出容器
#导出一个已经创建的容器到一个文件
docker export [容器ID]

20.导入容器
# 导出的容器快照文件可以再导入为镜像
docker import [路径]

21.查看日志
docker logs [容器ID]
实时查看日志输出
docker logs -f (类似 tail -f) (带上时间戳-t)
这个命令有以下常用参数 -f : 跟踪日志输出
–since :显示某个开始时间的所有日志 -t : 显示时间戳 –tail :仅列出最新N条容器日志

22.复制文件
# 从主机复制到容器
docker cp host_path containerID:container_path
# 从容器复制到主机
docker cp containerID:container_path host_path

23.显示一个镜像的历史;
docker history image_name

24.发布docker镜像
docker push new_image_name
要发布到私有Registry中的镜像,在镜像命名中需要带上Registry的域名(如果非80端口,同时需要带上端口号)比如:
docker push dockerhub.yourdomain.com:443/hello.demo.kdemo:v1.0

25.查看docker0的网络(宿主机上操作)
ip a show docker0

26.查看容器的IP地址
docker inspect -f ‘{{ .NetworkSettings.IPAddress }}’

27.附着到容器内部查看其内部ip:
ip a show eth0

==============
Dockerfile中一些常见的指令:

FROM:指定基础镜像
RUN:执行命令
COPY:复制文件
ADD:更高级的复制文件
CMD:容器启动命令
ENV:设置环境变量
EXPOSE:暴露端口

WEBLOGIC从单个模板创建域脚本

# 调用WLST来执行.py脚本
# source /$DOMAIN_HOME/bin/setDomainEnv.sh
# java weblogic.WLST xxx.py

# Read the template to use for creating the domain
readTemplate(‘oracle_home/middleware/wlserver/common/templates/wls/wls.jar’)

# Set the listen address and listen port for the Administration Server
cd(‘Servers/AdminServer’)
set(‘ListenAddress’,”)
set(‘ListenPort’, 7001)

# Enable SSL on the Administration Server and set the SSL listen address and port
create(‘AdminServer’,’SSL’)
cd(‘SSL/AdminServer’)
set(‘Enabled’, ‘True’)
set(‘ListenPort’, 7002)

# Set the domain password for the WebLogic Server administration user
cd(‘/’)
cd(‘Security/base_domain/User/’adminusername’)
cmo.setPassword(‘adminpassword’)

# If the domain already exists, overwrite the domain
setOption(‘OverwriteDomain’, ‘true’)

# write the domain and close the template
writeDomain(‘/domains/mydomain’)
closeTemplate()

exit()

# 调用WLST来执行.py脚本
# source $DOMAIN_HOME/bin/setDomainEnv.sh
# java weblogic.WLST xxx.py

connect(“weblogic”,”weblogic21″,”t3://127.0.0.1:7001″)
edit()
startEdit()

cd(‘/SecurityConfiguration/’+domainName);

cmo.setConnectionFilter(‘weblogic.security.net.ConnectionFilterImpl’)

set(‘ConnectionFilterRules’,jarray.array([String(‘10.0.0.0/8 * * allow t3 t3s’),String(‘127.0.0.1 * * allow t3 t3s’),String(‘* * 7001 deny t3 t3s’)],String))

save()
activate()

# 调用WLST来执行.py脚本
# source /$DOMAIN_HOME/bin/setDomainEnv.sh
# java weblogic.WLST xxx.py

connect(username=”weblogic”,password=”weblogic21″,url=”t3://127.0.0.1:7001″)

domainConfig()
edit()
startEdit()

servers=cmo.getServers()
for server in servers:
cd(‘/Servers/’ + server.getName())
cmo.setIIOPEnabled(false)

save()
activate()
disconnect()
exit()

weblogic10.3.6自动打补丁脚本

#!/bin/bash

MW_HOME=”/home/weblogic/Oracle/Middleware”
PATCH_FILE=”p33172858_1036_Generic.zip”
PATCH_TO_REMOVE=”21Y4″

# echo “Empty cache_dir”
rm -f ${MW_HOME}/utils/bsu/cache_dir/*

# echo “Download patch file”
wget http://10.1.1.1/weblogic/${PATCH_FILE}
unzip ${PATCH_FILE}

PATCH=`ls *.jar | cut -d’.’ –complement -f2-`
CATALOG=`ls patch-catalog*.xml`

# echo “Patch”
echo “PATCH=$PATCH”
echo “CATALOG=$CATALOG”

cp ${PATCH}.jar ${MW_HOME}/utils/bsu/cache_dir/.
cp ${CATALOG} ${MW_HOME}/utils/bsu/cache_dir/patch-catalog.xml

cd ${MW_HOME}/utils/bsu
#./bsu.sh -view -status=applied -prod_dir=${MW_HOME}/wlserver_10.3

if [ -n “$PATCH_TO_REMOVE” ]; then
${MW_HOME}/utils/bsu/bsu.sh -remove -prod_dir=${MW_HOME}/wlserver_10.3 -patchlist=${PATCH_TO_REMOVE} -verbose
fi

${MW_HOME}/utils/bsu/bsu.sh -prod_dir=${MW_HOME}/wlserver_10.3 -patchlist=${PATCH} -verbose -install

. ${MW_HOME}/wlserver_10.3/server/bin/setWLSEnv.sh
java weblogic.version

# 假设A服务器为源文件,B服务器为接收A推送文件的目标服务器。
# A服务器创建无密码的公钥
#ssh-keygen -f ~/.ssh/id_rsa -q -P “”
# A的公钥拷贝到B服务器,实现登录免密
#scp ~/.ssh/id_rsa.pub user@10.1.1.1/home/user/.ssh/authorized_keys

if [ -f /var/tmp/rsync_updates ]; then
echo “Updates via rsync already running.”
exit 0
fi

if [ -d /home/update/centos7 ] ; then
touch /var/tmp/rsync_updates

# 同步tsinghua的centos7最新包
rsync -aqzSHP –delete –exclude “local*” –exclude “isos” –exclude “atomic” –exclude “cloud” –exclude “dotnet” –exclude “configmanagement” –exclude “cr” –exclude “fasttrack” –exclude “infra” –exclude “messaging” –exclude “nfv” –exclude “opstools” –exclude “paas” –exclude “rt” –exclude “sclo” –exclude “storage” –exclude “virt” mirrors.tuna.tsinghua.edu.cn::centos/7/ /home/update/centos7/

# 同步tsinghua的epel7最新包
rsync -aqzSHP –delete –exclude “local*” –exclude “SRPMS” –exclude “aarch64” –exclude “ppc64” –exclude “ppc64le” –exclude “source” mirrors.tuna.tsinghua.edu.cn::epel/7/ /home/update/epel7/

# 推送centos7的最新包到下游更新服务器
rsync -aqzSHP –delete -e ‘ssh -p 22 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null’ /home/update/centos7/ user@10.1.1.1:/home/user/www/centos7/

# 推送epel7的最新包到下游更新服务器
rsync -aqzSHP –delete -e ‘ssh -p 22 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null’ /home/update/epel7/ user@10.1.1.1:/home/user/www/epel7/
/bin/rm -f /var/tmp/rsync_updates
else
echo “Target directory /home/update/centos7 not present.”
fi

============BTW:rsync参数说明
-a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-v, –verbose 详细模式输出
-q, –quiet 精简输出模式
-S, –sparse 对稀疏文件进行特殊处理以节省DST的空间
-H, –hard-links 保留硬链结
-P, -partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
-z, –compress 对备份的文件在传输时进行压缩处理