首页 > 其他分享 >week3

week3

时间:2022-08-29 23:51:19浏览次数:79  
标签:10.0 ## repo nginx base yum week3


title: week3
tags:

  • null
    categories:
  • null
    date: 2022-08-13 12:25:54

week3

1.yum私有仓库的实现及博客输出

2.阅读《图解TCP/IP》一书,地址:https://leon-wtf.github.io/doc/%E5%9B%BE%E8%A7%A3TCPIP.pdf,有时间的可以写下读书笔记

3.画图 TCP协议和三次握手及四次挥手,可以参考别人的,但是需要自己画一次

4.静态配置网卡IP,centos/ubuntu实现

脚本题

5.实现免密登陆脚本, expect登陆远程主机,将生成的密钥写入到目标主机, expect测试远程登陆。

1)通过shift读取脚本参数

2)通过select来选择功能.例如功能有

- 安装mysql

- 安装apache

- 免密钥登陆主机

当前我们只实现免密钥登陆主机

3)通过函数封装每个功能

4)将免密钥登陆的过程可以重复进行, while 循环实现重复,需要有退出过程。当用户输入exit时,退出免密钥功能。

5)支持输入一批主机免密钥,使用数组 实现

1.搭建私有的yum仓库

环境:server端 10.0.0.129

client端 10.0.0.130

server端本地yum源:/etc/yum.repos.d/base.repo

[base]
name=base
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever

[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/$releasever/$basearch/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-$releasever

[extras]
name=extras
baseurl=https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever

[updates]
name=updates
baseurl=https://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever

安装nginx,添加yum源的web端发布

添加base,epel,extras,appstream源的发布

##安装nginx编译依赖包gcc,支持ssl,zlib压缩等
yum install -y pcre pcre-devel gcc gcc-c++ openssl openssl-devel zlib zlib-devel gd gd-devel
wget -O https://nginx.org/download/nginx-1.20.2.tar.gz /data/nginx
tar xf nginx-1.20.2.tar.gz

##指定nginx安装目录 --prefix
cd nginx-1.20.2 ; ./configure --perfix=/usr/local/nginx
make && make install

nginx默认目录:/usr/local/nginx/html

1.配置nginx服务器

##进入到nginx
vim /usr/local/nginx/conf/nginx.conf

##监听端口为8080
server {
        listen       8080;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

#        location / {
#            root   /repo ;
#            index  index.html index.htm;
#        }
    
   	    #8080的server默认访问路径
        root /usr/local/nginx/html/repo;
        autoindex on;

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

##重启服务
./nginx -s reload

2.访问站点查看是否生效:10.0.0.129:8080

image-20220813113330186

在server端搭建yum源

1.同步本地的yum源packages到repo目录

##reposync:yum源同步工具,同步到对应的nginx发布中,同步现有的base源内的内容
##repo指的是同步本地的yum源到这个发布目录
reposync -r base -p /usr/local/nginx/html/repo

image-20220813082226420

2.创建源数据

##创建源数据,这个路径以后就放repo文件的
[10:55:20 root@slave1 repo]#createrepo /usr/local/nginx/html/repo/base
Spawning worker 0 with 10072 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

image-20220813105749148

3.制作yum源文件

这里制作yum源文件的时候,由于只有一个base.repo,所以包括base库,extras库,updates库,epel库都写在一起,用于给其他的client获取,地址写本机的IP地址10.0.0.129

##制作repo文件
vim /usr/local/nginx/html/repo/base.repo

# 不需要的仓库可以注释掉
# 内网仓库全部关闭gpgcheck校验
# 实现base仓库
# base仓库
[base]
name=Local CentOS-7  Base
baseurl=http://10.0.0.129/base
enabled=1
gpgcheck=0

# extras仓库
[extras]
name=Local CentOS-7  Extras
baseurl=http://10.0.0.129/base
enabled=1
gpgcheck=0

# updates仓库
[updates]
name=Local CentOS-7  Updates
baseurl=http://10.0.0.129/base
enabled=1
gpgcheck=0

# epel仓库
[epel]
name=Local Extra Packages for Enterprise Linux 7
baseurl=http://10.0.0.129/base
enabled=1
gpgcheck=0

#查看本地的yum仓库情况
yum repolist

client测试yum仓库

yum源文件必须放在/etc/yum.repos.d才生效,记得加上10.0.0.129:8080端口

##备份yum源
mkdir /etc/yum.repos.d/backup
mv /etc/yum.repos.d/* backup

##从server端获取yum源,curl -o指定目标路径
curl -o /etc/yum.repos.d/base.repo http://10.0.0.129:8080/base.repo

##构建缓存,查看yum仓库
yum clean all ; yum makecache ; yum repolist

image-20220813114310972

查看bind-utils有无,测试,证明yum源搭建成功

image-20220813114432789

2.阅读《图解TCP/IP》一书

地址:https://leon-wtf.github.io/doc/%E5%9B%BE%E8%A7%A3TCPIP.pdf,有时间的可以写下读书笔记

3.TCP三次挥手/四次挥手

TCP四次挥手

TCP三次挥手

4.静态配置网卡IP,centos/ubuntu实现

##centos7,8
vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="static"
IPADDR=10.0.0.128
PREFIX=24
GATEWAY=10.0.0.2
DNS1=114.114.114.114
DNS2=8.8.8.8
centos7:systemctl restart network
centos8:nmcli connection down ens160 && nmcli connection up ens160

##ubuntu
##已提前改过名字
vim /etc/netplan/ifcfg-ens33.yaml
# This is the network config written by 'subiquity'
network:
  ethernets:
    ens33:
      addresses: [10.0.0.131/24]
      gateway4: 10.0.0.2
      nameservers:
              addresses: [114.114.114.114,8.8.8.8]
      dhcp4: no
  version: 2

5.实现脚本功能

#!/bin/bash
########################################
#Author:Catyer
#time:2022-08-07_14:53:44
#filename:scp.sh
#Script description:
#实现免密登陆脚本, expect登陆远程主机,将生成的密钥写入到目标主机, expect测试远程登陆。
#1)通过shift读取脚本参数
#2)通过select来选择功能.例如功能有
#- 安装mysql
#- 安装apache
#- 免密钥登陆主机
#当前我们只实现免密钥登陆主机
#3)通过函数封装每个功能
#4)将免密钥登陆的过程可以重复进行, while 循环实现重复,需要有退出过程。当用户输入exit时,退出免密钥功能。
#5)支持输入一批主机免密钥,使用数组 实现
########################################

##引用function功能
. /etc/init.d/functions
 

MYSQL(){
	##二进制安装mysql
	echo "MYSQL"
}


APACHE(){

	OS=`awk -F= '/ID/{print $2}' /etc/os-release | head -n 1 | sed 's/\"//g'`
	##yum安装Apache
	if [ $OS == "centos" ] ;then
        	rpm -q httpd && echo "apache install" || yum -y install httpd;systemctl enable --now httpd
 	elif [ $OS == "ubuntu" ] ;then
        ##ubuntu自动启动服务
        	apt list --installed | grep httpd && echo "ubuntu httpd is installed" || apt update; apt -y install httpd 
        else
                echo "invalid $OS"   
    	fi
        echo "httpd test" > /var/www/html/index.html
    	curl 127.0.0.1:80
}

##使用SSHPASS功能
#SSHPASS(){
#
#pass1=123
#IP=(10.0.0.129
#10.0.0.130
#10.0.0.131
#10.0.0.132)
#
#echo "目标主机:${IP[*]}"
#
#cd /root && rm -rf .ssh
###生成自己的密钥,-p ""空密码,-f路径
#ssh-keygen -P "" -f /root/.ssh/id_rsa &>/dev/null
###判断sshpass是否安装
#rpm -q sshpass && echo "sshpass already install" || yum update;yum -y install sshpass
#for i in ${IP[*]};do
#        sshpass -p $pass1 ssh-copy-id -o StrictHostKeyChecking=no -i /root/.ssh/id_rsa.pub $i
#	ssh $i "echo `hostname -I`" && echo "$i ssh-keygen执行成功" || echo "failed"
#done
#
#}

EXPECT(){

host=(
10.0.0.129
10.0.0.130
10.0.0.131
10.0.0.132
)

pass1=123

##本机删除掉SSH秘钥
cd /root ; rm -rf .ssh
ssh-keygen -P "" -f /root/.ssh/id_rsa &>/dev/null

##定义x的值
x=0

##x值小于等于数组长度,执行循环,包括数组最大长度
while [ $x -le ${#host[*]} ] ; do
i=${host[$x]} ##数组对应下标元素(IP)赋值给i变量

cat << EOF
EXPECT选项
1.expect:执行免秘钥
2.exit:退出
EOF

read -p "please input your choice:" choice
case $choice in
1|"expect")

##再次判断一次x的值,如果小于数组长度,则退出;不包括数组最大长度,当x达到数组最大长度,则不执行以下循环,退出
if [ $x -lt ${#host[*]} ];then
	let x++ 
	expect <<EOF
	spawn ssh-copy-id root@$i
	expect {
		"yes/no" {send "yes\n";exp_continue}
		"password" {send "$pass1\n"}
	}
	expect eof
EOF
##调用action
action "主机$i SSH成功" true

else
	echo "已经达到数组最大长度,退出"
	break
fi

#let x++
;;

2|"exit") break ;; ##退出函数,可以在两次expect之间退出

esac
done

}


while :
do
echo "输入想要实现的功能:"
select order in 安装MySQL 安装apache EXPECT测试 EXIT退出;do
case $REPLY in
    1)  MYSQL ;;
    2)  APACHE ;;
    3)  EXPECT ;;
    4)  exit 2 ;; ##退出两层循环
    esac
done
done


实现效果

主界面

image-20220813122734744

执行安装Apache(已安装)

image-20220813122822678

执行安装 Apache(未安装)

image-20220813122942630

image-20220813122954319

执行第一次expect

image-20220813123029478

测试scp文件是否能够免秘钥传输到10.0.0.129

image-20220813123138302

执行第二次expect

image-20220813123213314

达到数据长度上限,退出脚本

image-20220813123305069

标签:10.0,##,repo,nginx,base,yum,week3
From: https://www.cnblogs.com/catyer/p/16637833.html

相关文章

  • AcWing秋招每日一题——week3
    1、跳跃游戏题目给你一个整数数组 arr ,你一开始在数组的第一个元素处(下标为0)。每一步,你可以从下标 i 跳到下标 i+1、i-1或者j:i+1需满足:i+1<arr.l......
  • week3
    week31.yum私有仓库的实现及博客输出2.阅读《图解TCP/IP》一书,地址:https://leon-wtf.github.io/doc/%E5%9B%BE%E8%A7%A3TCPIP.pdf,有时间的可以写下读书笔记3.画图TCP......