---
tags: BASH
---
--------------------
# ~/cnt
---
## confog
- 設定所有程式會使用到的環境變數。
>$ nano config
```bash=
HN=gw02
UR=bigred
DR=~/cnt
master_ip=192.168.20.10
CLUSTER="mas01 wka01 wka02 wka03 wka04 ds01"
GW=$(route -n | grep -e "^0.0.0.0 ")
GWIF=${GW##* }
IPS=$(ifconfig $GWIF | grep 'inet ')
IP=$(echo $IPS | cut -d' ' -f2)
HTTPORT=8888
```
---
## startcnt
- xxx
>$ ~/bin/startcnt
```bash=
#!/bin/bash
source config
cat /etc/os-release | grep 'NAME="Ubuntu"' &>/dev/null
[ "$?" != "0" ] && echo "the system is not Ubuntu" && exit 1
[ `hostname` != "${HN}" ] && echo "wrong hostname" && exit 1
[ `whoami` != "${UR}" ] && echo "wrong user" && exit 1
[ `pwd` != "${DR}" ] && echo "pls move to cnt" && exit 1
echo "`hostname` is updating"
sudo apt update &>/dev/null
echo "${HN} update ok"
which sshpass &>/dev/null
[ "$?" != "0" ] && sudo apt-get install sshpass &>/dev/null && echo "sshpass install ok"
which ./busybox &>/dev/null
[ "$?" != "0" ] && wget https://busybox.net/downloads/binaries/1.28.1-defconfig-multiarch/busybox-x86_64 &>/dev/null && echo "busybox install ok" && sudo chmod +x busybox-x86_64 && mv busybox-x86_64 busybox
ps aux | grep -v grep | grep "busybox httpd -p ${HTTPORT}" &>/dev/null
if [ "$?" = "0" ];then
echo "busybox httpd started"
else
./busybox httpd -p ${HTTPORT} -h www
fi
echo "prefly is beginning"
for n in $CLUSTER
do
nc -w 1 -z $n 22 &>/dev/null
if [ $? = 0 ] ; then
sshpass -p "root" ssh root@${n} grep bigred /etc/passwd &>/dev/null
if [ $? != 0 ] ; then
sshpass -p "root" ssh -q root@${n} "apk add curl" &>/dev/null
sshpass -p "root" ssh root@${n} "curl ${IP}:${HTTPORT}/set/prefly.sh| sh" &>/dev/null
echo "${n} system prefly ok"
else
echo "$n bigred exist"
fi
else
echo "$n not exist"
fi
done
```
---
## stopcnt
- xxx
>$ ~/bin/stopcnt
```bash=
#!/bin/bash
fuser -k ./busybox &>/dev/null
if [ $? = 0 ] ; then
echo "cnt stop ok"
else
echo "httpd not found"
fi
```
---
## sysprep.sh
- xxx
>$ ~/bin/sysprep.sh
```bash=
#!/bin/bash
source ~/cnt/config
[ `hostname` != "${HN}" ] && echo "wrong hostname" && exit 1
[ `whoami` != "${UR}" ] && echo "wrong user" && exit 1
[ `pwd` != "${DR}" ] && echo "pls move to ${DR}" && exit 1
echo '' | ssh-keygen -t rsa -P '' &>/dev/null
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
for n in ${CLUSTER}
do
nc -w 1 -z $n 22 &>/dev/null
if [ "$?" == "0" ];then
sshpass -p 'bigred' ssh $n ls ~/.ssh/id_rsa &>/dev/null
if [ "$?" != "0" ];then
sshpass -p 'bigred' ssh -q $n cat /etc/os-release|grep 'NAME="Alpine Linux"' &>/dev/null
if [ $? != 0 ];then
echo "$n system is not alpine"
else
sshpass -p 'bigred' ssh $n 'sudo rm -r ~/.ssh/ &>/dev/null'
sshpass -p 'bigred' ssh $n 'mkdir -p ~/.ssh'
sshpass -p 'bigred' scp -r ~/.ssh/ $n:~
sshpass -p 'bigred' ssh $n 'chmod -R 700 .ssh/'
sshpass -p 'bigred' ssh $n 'rm ~/.ssh/known_hosts'
fi
echo "$n system prepare ok"
else
echo "$n .ssh created"
fi
fi
done
```
---
## clusterinfo.sh
- xxx
>$ ~/bin/clusterinfo.sh
```bash=
#!/bin/bash
source config
[ `hostname` != "${HN}" ] && echo "wrong hostname" && exit 1
[ `whoami` != "${UR}" ] && echo "wrong user" && exit 1
[ `pwd` != ${DR} ] && echo "pls move to cnt2" && exit 1
for n in ${CLUSTER}
do
nc -w 1 -z $n 22 &>/dev/null
if [ "$?" == "0" ];then
ssh $n "curl -s http://${IP}:${HTTPORT}/sysinfo.sh | bash"
fi
done
```
---
## mku.sh
- xxx
>$ ~/bin/mku.sh
```bash=
#!/bin/bash
[ -z ${mas_ip} ] && echo "pls export mas_ip" && exit 1
which envsubst &>/dev/null
[ $? != 0 ] && sudo apk add gettext &>dev/null
which kubectl &>/dev/null
[ $? != 0 ] && curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl" && echo "kubectl ok"
[ ! -d ".kube" ] && mkdir .kube && scp mas01:/etc/rancher/k3s/k3s.yaml .kube/config &>/dev/null
for n in $(seq $2 $3)
do
export stu=${1}${n}
if [ ! -d /home/${stu} ];then
sudo adduser -s /bin/bash -h /home/${stu} -D ${stu}
echo -e "${stu}\n${stu}\n" | sudo passwd ${stu} &> /dev/null
echo "${stu} ready"
ssh mas01 ls ~/class/${stu}.key &> /dev/null
if [ $? = 0 ]; then
mkdir ${stu}
scp mas01:~/class/${stu}.* ${stu}/ &>/dev/null
sudo mv ${stu} /home/${stu}/ &>/dev/null
sudo chmod 700 /home/${stu}/${stu}/${stu}.*
else
echo "${stu} key not exist"
fi
sudo mkdir -p /home/${stu}/.kube
cat .kube/config | head -n 4 > ${stu}.config
cat config.temp | envsubst >> ${stu}.config
sudo mv ${stu}.config /home/${stu}/.kube/config
sudo chown -R ${stu}:${stu} /home/${stu}
else
echo "${stu} is exist"
fi
done
```
---
## context.temp
- xxx
>$ ~/bin/context.temp
```bash=
server: https://${mas_ip}:6443
name: default
contexts:
- context:
cluster: default
namespace: ${stu}
user: ${stu}
name: ${stu}-context
current-context: ${stu}-context
kind: Config
preferences: {}
users:
- name: ${stu}
user:
client-certificate: /home/${stu}/${stu}/${stu}.crt
client-key: /home/${stu}/${stu}/${stu}.key
```
---
## rb.sh
- xxx
>$ ~/bin/rb.sh
```bash=
#!/bin/bash
source config
for i in $CLUSTER
do
ssh $i 'sudo reboot'
echo "$i reboot ok"
done
```
- install busybox
--------------------
# ~/cnt/bin
---
## class-clean
- xxx
>$ nano ~/cnt/bin/class-clean
```bash=
#!/bin/bash
read -p "Are You Sure ?(YES/NO)" ans
[ ${ans} != "YES" ] && echo "Sorry Sorry Sorry..." && exit 1
[ -d ~/class/student ] && rm ~/class/student/*.*
kubectl get csr | grep $1 &>/dev/null
[ $? == 0 ] && kubectl delete csr --all
#kubectl config get-users | grep $1 &>/dev/null
#[ $? != 0 ] && exit 1
#for i in $(seq $2 $3)
#do
# kubectl config get-users | grep $1 &>/dev/null
# [ $? == 0 ] && kubectl config delete-user
#done
```
## csr.yaml
- xxx
>$ nano ~/cnt/bin/csr.yaml
```yaml=
apiVersion: certificates.k8s.io/v1beta1
kind: CertificateSigningRequest
metadata:
name: ${stu}-csr
spec:
groups:
- system:authenticated
request: ${BASE64_CSR}
usages:
- digital signature
- key encipherment
- server auth
- client auth
```
---
## k3s.sh
- xxx
>$ nano ~/cnt/bin/k3s.sh
```bash=
#!/bin/bash
which envsubst &>/dev/null
[ $? = 1 ] && sudo apk add gettext &>/dev/null
for n in $(seq $2 $3)
do
export stu=${1}${n}
./bin/mkubeuser.sh ${1}
./bin/mkcontext.sh
done
```
---
## mkcontext.sh
- xxx
>$ nano ~/cnt/bin/mkcontext.sh
```bash=
#!/bin/bash
kubectl get namespace ${stu} &>/dev/null
if [ $? = 0 ] ; then
echo "namespace ${stu} is exist"
else
kubectl create namespace ${stu}
sudo kubectl config set-context ${stu}-context --cluster=default --namespace=${stu} --user=${stu} &>/dev/null
kubectl config view | grep -B 4 ${stu}-context
cat ~/class/bin/role.yaml | envsubst | kubectl apply -f -
cat ~/class/bin/rolebind.yaml | envsubst | kubectl apply -f -
fi
```
---
## mkubeuser.sh
- xxx
>$ nano ~/cnt/bin/mkubeuser.sh
```bash=
#!/bin/bash
if [ -f ${stu}.key ]; then
echo "${stu}.key is exist"
else
openssl genrsa -out ~/class/student/${stu}.key 2048 &>/dev/null
openssl req -new -key ~/class/student/${stu}.key -out ~/class/student/${stu}.csr -subj "/CN=${stu}/O=${1}"
export BASE64_CSR=$(cat ~/class/student/${stu}.csr | base64 | tr -d '\n')
cat ~/class/bin/csr.yaml | envsubst | kubectl apply -f - &>/dev/null
kubectl certificate approve ${stu}-csr
kubectl get csr ${stu}-csr -o jsonpath='{.status.certificate}' | base64 -d > /home/bigred/class/student/${stu}.crt
sudo kubectl config set-credentials ${stu} --client-certificate=/home/bigred/class/student/${stu}.crt --client-key=/home/bigred/class/student/${stu}.key &>/dev/null
kubectl config view | grep -A 3 "name: ${stu}"
fi
```
---
## role.yaml
- xxx
>$ nano ~/cnt/bin/role.yaml
```yaml=
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: ${stu}
name: ${stu}-reader
rules:
- apiGroups: [""] # "" indicates the core API group
resources: ["pods", "services", "nodes", "persistentvolumeclaims", "persistentvolume"]
verbs: ["create", "delete", "deletecollection", "get", "list", "patch", "update", "watch"]
- apiGroups: ["apps"]
resources: ["deployments", "replicasets", "statefulsets"]
verbs: ["create", "delete", "deletecollection", "get", "list", "patch", "update", "watch"]
- apiGroups: ["autoscaling"]
resources: ["horizontalpodautoscalers"]
verbs: ["create", "delete", "deletecollection", "get", "list", "patch", "update", "watch"]
```
---
## rolebind.yaml
- xxx
> $ nano ~/cnt/bin/olebind.yaml
```yaml=
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: ${stu}-read-access
namespace: ${stu}
subjects:
- kind: User
name: ${stu}
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role #this must be Role or ClusterRole
name: ${stu}-reader
apiGroup: rbac.authorization.k8s.io
```
---
# ~/cnt/www
---
## prefly.sh
- xxx
>$ nano ~/cnt/www/set/prefly.sh
```bash=
#!/bin/bash
apk update &> /dev/null
apk upgrade &> /dev/null
[ $? = 0 ] && echo "system upgrade ok"
for ap in nano bash curl tree sudo grep procps
do
which $ap &>/dev/null
[ "$?" != "0" ] && apk add ${ap} &> /dev/null
[ $? = 0 ] && echo "${ap} add ok"
done
echo '%wheel ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
[ $? = 0 ] && echo "sudo Nopasswd OK"
echo 'StrictHostKeyChecking no' >> /etc/ssh/ssh_config
if [ ! -d /home/bigred ];then
adduser -s /bin/bash -h /home/bigred -D bigred
addgroup bigred wheel
echo -e "bigred\nbigred\n" | passwd bigred &> /dev/null
echo "bigred ready"
else
echo "bigred exist"
fi
```
---
## sysinfo
- 顯示系統硬體設備資料
>$ nano ~/cnt/www/sysinfo
```bash=
#!/bin/bash
gw=$(route -n | grep -e "^0.0.0.0 ")
GWIF=${gw##* }
ips=$(ifconfig $GWIF | grep 'inet ')
IP=$(echo $ips | cut -d' ' -f2)
NETID=${IP%.*}
GW=$(route -n | grep -e '^0.0.0.0' | tr -s \ - | cut -d ' ' -f2)
echo "[`hostname`]"
echo "--------------------------------------------------------"
os=$(cat /etc/os-release | grep -E "^NAME" | cut -d'=' -f 2)
vs=$(cat /etc/os-release | grep VERSION_ID | cut -d'=' -f 2)
echo "OS : $os"
echo "VERSION : $vs"
cn=$(cat /proc/cpuinfo | grep 'model name' | head -n 1 | cut -d ':' -f2 | tr -s ' ')
echo -n "CPU : $cn (core: "
cn=$(cat /proc/cpuinfo | grep 'model name' | wc -l)
echo "$cn)"
m=$(free -mh | grep Mem:)
echo -n "Memory : "
echo $m | cut -d' ' -f2 | sed 's/.$//'
echo "IP Address : $IP"
echo "Default Gateway : $GW"
echo ""
java -version &> /tmp/java
[ "$?" != "0" ] && echo 'JAVA NOT FOUND' || cat /tmp/java
echo ""
```
---