← Back to Index

离线ccn, containered cloud native 制作

基本思路

additional need:

image need:

reference:

my upstream repository

build github clone site, using gitea

似乎 gitea 并没有在离线部署脚本中


        # http://git.ocp4.redhat.ren:10080/
        
        cat << EOF >>  /etc/hosts
        127.0.0.1 registry.ocp4.redhat.ren nexus.ocp4.redhat.ren git.ocp4.redhat.ren
        EOF
        
        yum install -y firewalld
        systemctl disable --now firewalld
        
        # systemctl start firewalld
        
        yum -y install podman pigz skopeo buildah
        
        podman image prune -a
        
        ############################################
        
        # build init fs
        
        mkdir -p /data/ccn/gitea
        cd /data/ccn
        rm -rf /data/ccn/gitea
        
        mkdir -p /data/ccn/gitea
        chown -R 1000:1000 /data/ccn/gitea
        
        podman run -d --name gitea \
          -v /data/ccn/gitea:/data:Z \
          -e USER_UID=1000 \
          -e USER_GID=1000 \
          -p 10080:3000 \
          -p 10022:22 \
          docker.io/gitea/gitea:1.13.0
        
        # admin user: root / redhat
        
        # api call token : 6d47a0172d53e567737f7a81bbb6dbff4c1565d1
        
        cd /data/ccn
        tar cf - ./gitea | pigz -c > gitea.tgz 
        buildah from --name onbuild-container scratch
        buildah copy onbuild-container gitea.tgz  /
        buildah umount onbuild-container 
        buildah commit --rm --format=docker onbuild-container docker.io/wangzheng422/gogs-fs:gitea-init
        rm -f gitea.tgz 
        buildah push docker.io/wangzheng422/gogs-fs:gitea-init
        echo "docker.io/wangzheng422/gogs-fs:gitea-init"
        
        ######################################################
        
        # build gitea based on init fs
        
        mkdir -p /data/ccn/gitea
        cd /data/ccn
        rm -rf /data/ccn/gitea
        
        mkdir -p /data/ccn/gitea
        chown -R 1000:1000 /data/ccn/gitea
        
        cd /data/ccn
        podman create --name swap docker.io/wangzheng422/gogs-fs:gitea-init ls
        podman cp swap:/gitea.tgz - > gitea.tgz
        podman rm -fv swap
        tar zvxf gitea.tgz
        rm -f gitea.tgz
        chown -R 1000:1000 /data/ccn/gitea
        
        podman run -d --name gitea \
          -v /data/ccn/gitea:/data:Z \
          -e USER_UID=1000 \
          -e USER_GID=1000 \
          -p 10080:3000 \
          -p 10022:22 \
          docker.io/gitea/gitea:1.13.0
        
        
        # Custom config '/data/ccn/gogs/gogs/conf/app.ini'
        
        # find the access key in pwd file
        
        export ACCESS_KEY="6d47a0172d53e567737f7a81bbb6dbff4c1565d1"
        
        # curl -v -s -w '%{http_code}' -H "Authorization: token ${ACCESS_KEY}" -X DELETE http://gogs.redhat.ren:10080/api/v1/repos/root/cloud-native-workshop-v2m1-guides
        
        # curl -v -s -w '%{http_code}' -H "Authorization: token ${ACCESS_KEY}" -X DELETE http://gogs.redhat.ren:10080/api/v1/repos/root/cloud-native-workshop-v2m2-guides
        
        # curl -v -s -w '%{http_code}' -H "Authorization: token ${ACCESS_KEY}" -X DELETE http://gogs.redhat.ren:10080/api/v1/repos/root/cloud-native-workshop-v2m3-guides
        
        # curl -v -s -w '%{http_code}' -H "Authorization: token ${ACCESS_KEY}" -X DELETE http://gogs.redhat.ren:10080/api/v1/repos/root/cloud-native-workshop-v2m4-guides
        
        # curl -v -s -w '%{http_code}' -H "Authorization: token ${ACCESS_KEY}" -X DELETE http://gogs.redhat.ren:10080/api/v1/repos/root/cloud-native-workshop-v2m1-labs
        
        # curl -v -s -w '%{http_code}' -H "Authorization: token ${ACCESS_KEY}" -X DELETE http://gogs.redhat.ren:10080/api/v1/repos/root/cloud-native-workshop-v2m2-labs
        
        # curl -v -s -w '%{http_code}' -H "Authorization: token ${ACCESS_KEY}" -X DELETE http://gogs.redhat.ren:10080/api/v1/repos/root/cloud-native-workshop-v2m3-labs
        
        # curl -v -s -w '%{http_code}' -H "Authorization: token ${ACCESS_KEY}" -X DELETE http://gogs.redhat.ren:10080/api/v1/repos/root/cloud-native-workshop-v2m4-labs
        
        curl -v -s -w '%{http_code}' -H "Authorization: token ${ACCESS_KEY}" -X POST http://git.ocp4.redhat.ren:10080/api/v1/repos/migrate \
                -H "Content-Type: application/json" \
                -d '{"clone_addr": "'"https://github.com/wangzheng422/cloud-native-workshop-v2m1-guides.git"'", "uid": '"1"', "repo_name": "'"cloud-native-workshop-v2m1-guides"'" }' 
        
        curl -v -s -w '%{http_code}' -H "Authorization: token ${ACCESS_KEY}" -X POST http://git.ocp4.redhat.ren:10080/api/v1/repos/migrate \
                -H "Content-Type: application/json" \
                -d '{"clone_addr": "'"https://github.com/wangzheng422/cloud-native-workshop-v2m2-guides.git"'", "uid": '"1"', "repo_name": "'"cloud-native-workshop-v2m2-guides"'" }' 
        
        curl -v -s -w '%{http_code}' -H "Authorization: token ${ACCESS_KEY}" -X POST http://git.ocp4.redhat.ren:10080/api/v1/repos/migrate \
                -H "Content-Type: application/json" \
                -d '{"clone_addr": "'"https://github.com/wangzheng422/cloud-native-workshop-v2m3-guides.git"'", "uid": '"1"', "repo_name": "'"cloud-native-workshop-v2m3-guides"'" }' 
        
        curl -v -s -w '%{http_code}' -H "Authorization: token ${ACCESS_KEY}" -X POST http://git.ocp4.redhat.ren:10080/api/v1/repos/migrate \
                -H "Content-Type: application/json" \
                -d '{"clone_addr": "'"https://github.com/wangzheng422/cloud-native-workshop-v2m4-guides.git"'", "uid": '"1"', "repo_name": "'"cloud-native-workshop-v2m4-guides"'" }' 
        
        curl -v -s -w '%{http_code}' -H "Authorization: token ${ACCESS_KEY}" -X POST http://git.ocp4.redhat.ren:10080/api/v1/repos/migrate \
                -H "Content-Type: application/json" \
                -d '{"clone_addr": "'"https://github.com/wangzheng422/cloud-native-workshop-v2m1-labs.git"'", "uid": '"1"', "repo_name": "'"cloud-native-workshop-v2m1-labs"'" }' 
        
        curl -v -s -w '%{http_code}' -H "Authorization: token ${ACCESS_KEY}" -X POST http://git.ocp4.redhat.ren:10080/api/v1/repos/migrate \
                -H "Content-Type: application/json" \
                -d '{"clone_addr": "'"https://github.com/wangzheng422/cloud-native-workshop-v2m2-labs.git"'", "uid": '"1"', "repo_name": "'"cloud-native-workshop-v2m2-labs"'" }' 
        
        curl -v -s -w '%{http_code}' -H "Authorization: token ${ACCESS_KEY}" -X POST http://git.ocp4.redhat.ren:10080/api/v1/repos/migrate \
                -H "Content-Type: application/json" \
                -d '{"clone_addr": "'"https://github.com/wangzheng422/cloud-native-workshop-v2m3-labs.git"'", "uid": '"1"', "repo_name": "'"cloud-native-workshop-v2m3-labs"'" }' 
        
        curl -v -s -w '%{http_code}' -H "Authorization: token ${ACCESS_KEY}" -X POST http://git.ocp4.redhat.ren:10080/api/v1/repos/migrate \
                -H "Content-Type: application/json" \
                -d '{"clone_addr": "'"https://github.com/wangzheng422/cloud-native-workshop-v2m4-labs.git"'", "uid": '"1"', "repo_name": "'"cloud-native-workshop-v2m4-labs"'" }' 
        
        curl -v -s -w '%{http_code}' -H "Authorization: token ${ACCESS_KEY}" -X POST http://git.ocp4.redhat.ren:10080/api/v1/repos/migrate \
                -H "Content-Type: application/json" \
                -d '{"clone_addr": "'"https://github.com/spring-projects/spring-petclinic.git"'", "uid": '"1"', "repo_name": "'"spring-petclinic"'" }' 
        
        curl -v -s -w '%{http_code}' -H "Authorization: token ${ACCESS_KEY}" -X POST http://git.ocp4.redhat.ren:10080/api/v1/repos/migrate \
                -H "Content-Type: application/json" \
                -d '{"clone_addr": "'"https://github.com/wangzheng422/vote-api.git"'", "uid": '"1"', "repo_name": "'"vote-api"'" }' 
        
        curl -v -s -w '%{http_code}' -H "Authorization: token ${ACCESS_KEY}" -X POST http://git.ocp4.redhat.ren:10080/api/v1/repos/migrate \
                -H "Content-Type: application/json" \
                -d '{"clone_addr": "'"https://github.com/wangzheng422/vote-ui.git"'", "uid": '"1"', "repo_name": "'"vote-ui"'" }' 
        
        
        podman logs -f gitea
        
        podman stop gitea
        podman rm -fv gitea
        
        # bash demo.env.build.sh
        
        cd /data/ccn
        
        var_date=$(date '+%Y-%m-%d-%H%M')
        echo $var_date
        
        tar cf - ./gitea | pigz -c > gitea.tgz
        buildah from --name onbuild-container scratch
        buildah copy onbuild-container gitea.tgz /
        buildah umount onbuild-container 
        buildah commit --rm --format=docker onbuild-container docker.io/wangzheng422/gogs-fs:gitea-$var_date
        rm -f gitea.tgz
        buildah push docker.io/wangzheng422/gogs-fs:gitea-$var_date
        echo "docker.io/wangzheng422/gogs-fs:gitea-$var_date"
        
        # docker.io/wangzheng422/gogs-fs:gitea-2021-01-06-0652

create an online nexus maven proxy

我们使用一个在线的nexus proxy,来cache maven


        # get old fs
        
        mkdir -p /data/ccn/nexus
        cd /data/ccn/
        podman create --name swap docker.io/wangzheng422/nexus-fs:2020-10-25-0919 ls
        podman cp swap:/nexus.tgz - > /data/ccn/nexus.tgz
        podman rm -fv swap
        tar zvxf nexus.tgz
        rm -f nexus.tgz
        
        chown -R 200 /data/ccn/nexus
        
        #####################################################
        
        # init build the nexus fs
        
        mkdir -p /data/ccn/nexus
        chown -R 200 /data/ccn/nexus
        
        podman run -d -p 8081:8081 --name nexus -v /data/ccn/nexus:/nexus-data:Z docker.io/sonatype/nexus3:3.29.0
        
        podman stop nexus
        podman rm nexus
        
        # get the admin password
        
        cat /data/ccn/nexus/admin.password && echo
        
        # 8c9862da-5dcd-430c-a026-e3557539459a
        
        # open http://nexus.ocp4.redhat.ren:8081
        
        # add aliyun maven proxy
        
        # https://blog.csdn.net/kq1983/article/details/83066102
        
        ######################################################
        
        # dump the nexus image fs out
        
        var_date=$(date '+%Y-%m-%d-%H%M')
        echo $var_date
        cd /data/ccn
        
        tar cf - ./nexus | pigz -c > nexus.tgz 
        buildah from --name onbuild-container scratch
        buildah copy onbuild-container nexus.tgz  /
        buildah umount onbuild-container 
        buildah commit --rm --format=docker onbuild-container docker.io/wangzheng422/nexus-fs:maven-$var_date
        
        # buildah rm onbuild-container
        
        rm -f nexus.tgz 
        buildah push docker.io/wangzheng422/nexus-fs:maven-$var_date
        echo "docker.io/wangzheng422/nexus-fs:maven-$var_date"
        
        # docker.io/wangzheng422/nexus-fs:maven-2021-01-06-1456

create code ready workspace image

CRW 给每个session启动了一个container,这个container的image就是用的操作台,我们定制一下这个操作台,让maven什么的都指向内网的proxy


        mkdir -p /data/ccn/workspaces
        cd /data/ccn/workspaces
        
        # /bin/cp -f /data/order-service.tgz ./
        
        wget -O settings.xml https://raw.githubusercontent.com/wangzheng422/docker_env/dev/redhat/ocp4/4.6/ccn/settings.xml
        wget -O .npmrc https://raw.githubusercontent.com/wangzheng422/docker_env/dev/redhat/ocp4/4.6/ccn/.npmrc
        wget -O .bowerrc https://raw.githubusercontent.com/wangzheng422/docker_env/dev/redhat/ocp4/4.6/ccn/.bowerrc
        wget --no-check-certificate --no-cache --no-cookies -O stack.Dockerfile https://raw.githubusercontent.com/wangzheng422/docker_env/dev/redhat/ocp4/4.6/ccn/stack.dev.Dockerfile
        
        buildah bud --format=docker -t docker.io/wangzheng422/cloudnative-workspaces-quarkus:2.4.1-wzh -f stack.Dockerfile .
        
        buildah push docker.io/wangzheng422/cloudnative-workspaces-quarkus:2.4.1-wzh
        

mta vscode extension

ccn 4.6 做了一个vscode上的extension,这个需要做离线

################################3
        
        ## build mta extension
        
        # install nodejs
        
        curl -sL https://rpm.nodesource.com/setup_10.x | sudo bash -
        yum install -y nodejs
        npm install -g typescript vsce
        
        mkdir -p /data/ccn/vscode
        cd /data/ccn/vscode
        git clone https://github.com/wangzheng422/rhamt-vscode-extension
        cd rhamt-vscode-extension
        git checkout ocp-4.6-ccn
        
        npm install
        npm run vscode:prepublish
        vsce package -o mta-vscode-extension.vsix
        
        cp mta-vscode-extension.vsix ../
        cd /data/ccn/vscode
        
        ###################################
        
        ## use redhat upstream
        
        var_date=$(date '+%Y-%m-%d-%H%M')
        echo $var_date
        
        mkdir -p /data/ccn/vscode
        cd /data/ccn/vscode
        
        # wget -O mta-vscode-extension.vsix https://download.jboss.org/jbosstools/adapters/snapshots/mta-vscode-extension/mta-vscode-extension-0.0.48-662.vsix
        
        wget https://www.eclipse.org/che/images/logo-eclipseche.svg
        
        buildah from --name onbuild-container scratch
        buildah copy onbuild-container mta-vscode-extension.vsix  /
        buildah copy onbuild-container logo-eclipseche.svg  /
        buildah umount onbuild-container 
        buildah commit --rm --format=docker onbuild-container docker.io/wangzheng422/imgs:mta-vscode-extension.vsix-$var_date
        cd /data/ccn
        
        # rm -rf /data/ccn/vscode
        
        buildah push docker.io/wangzheng422/imgs:mta-vscode-extension.vsix-$var_date
        echo "docker.io/wangzheng422/imgs:mta-vscode-extension.vsix-$var_date"
        
        # docker.io/wangzheng422/imgs:mta-vscode-extension.vsix-2020-12-30-1012
        
        ##############################
        
        # use real upstream
        
        var_date=$(date '+%Y-%m-%d-%H%M')
        echo $var_date
        
        buildah from --name onbuild-container quay.io/windupeng/mta-vscode-extension
        buildah umount onbuild-container 
        buildah commit --rm --format=docker onbuild-container docker.io/wangzheng422/imgs:mta-vscode-extension.base-$var_date
        buildah push docker.io/wangzheng422/imgs:mta-vscode-extension.base-$var_date
        echo "docker.io/wangzheng422/imgs:mta-vscode-extension.base-$var_date"
        
        # docker.io/wangzheng422/imgs:mta-vscode-extension.base-2020-12-30-1340
        
        # if you want to use prebuild newer version
        
        # https://raw.githubusercontent.com/windup/rhamt-che-demo/master/meta.yaml
        
        mkdir -p /data/ccn/vscode
        cd /data/ccn/vscode
        wget -O mta-vscode-extension.vsix https://download.jboss.org/jbosstools/adapters/snapshots/mta-vscode-extension/mta-vscode-extension-0.0.58-790.vsix
        wget https://www.eclipse.org/che/images/logo-eclipseche.svg
        
        buildah from --name onbuild-container scratch
        buildah copy onbuild-container mta-vscode-extension.vsix  /
        buildah copy onbuild-container logo-eclipseche.svg  /
        buildah umount onbuild-container 
        buildah commit --rm --format=docker onbuild-container docker.io/wangzheng422/imgs:mta-vscode-extension.vsix-0.0.48-662
        cd /data/ccn
        
        # rm -rf /data/ccn/vscode
        
        buildah push docker.io/wangzheng422/imgs:mta-vscode-extension.vsix-0.0.48-662
        
        oc get pod -o json | jq -r .items[0].metadata.name
        oc get pod -o json | jq -r .items[0].spec.containers[].name
        oc get pod -o json | jq -r .items[0].spec.initContainers[].name
        
        oc rsh -c $(oc get pod -o json | jq -r '.items[0].spec.containers[] | select( .name | contains("rhamt-extension") ) | .name')  $(oc get pod -o json | jq -r .items[0].metadata.name)
        
        oc logs $(oc get pod -o json | jq -r .items[0].metadata.name) -c $(oc get pod -o json | jq -r '.items[0].spec.containers[] | select( .name | contains("rhamt-extension") ) | .name')
        
        oc logs $(oc get pod -o json | jq -r .items[0].metadata.name) -c $(oc get pod -o json | jq -r '.items[0].spec.containers[] | select( .name | contains("theia-ide") ) | .name')
        
        oc logs $(oc get pod -o json | jq -r .items[0].metadata.name) -c $(oc get pod -o json | jq -r '.items[0].spec.containers[] | select( .name | contains("vscode-quarkus") ) | .name')
        
        oc logs $(oc get pod -o json | jq -r .items[0].metadata.name) -c $(oc get pod -o json | jq -r '.items[0].spec.containers[] | select( .name | contains("che-jwtproxy") ) | .name')
        
        oc logs $(oc get pod -o json | jq -r .items[0].metadata.name) -c $(oc get pod -o json | jq -r '.items[0].spec.containers[] | select( .name | contains("quarkus-tools") ) | .name')
        
        oc logs $(oc get pod -o json | jq -r .items[0].metadata.name) -c $(oc get pod -o json | jq -r '.items[0].spec.containers[] | select( .name | contains("che-machine-exe") ) | .name')
        
        oc logs $(oc get pod -o json | jq -r .items[0].metadata.name) -c $(oc get pod -o json | jq -r '.items[0].spec.initContainers[] | select( .name | contains("remote-runtime-inject") ) | .name')
        
        oc logs $(oc get pod -o json | jq -r .items[0].metadata.name) -c $(oc get pod -o json | jq -r '.items[0].spec.initContainers[] | select( .name | contains("pluginbroker-artifacts-rhel8") ) | .name')
        
        oc exec $(oc get pod -o json | jq -r .items[0].metadata.name) -c $(oc get pod -o json | jq -r '.items[0].spec.containers[] | select( .name | contains("rhamt-extension") ) | .name') -- /usr/sbin/killall5
        

build static html file


        # get source to image 
        
        # https://github.com/openshift/source-to-image
        
        wget -O source-to-image.tgz https://github.com/openshift/source-to-image/releases/download/v1.3.0/source-to-image-v1.3.0-eed2850f-linux-amd64.tar.gz
        tar zvxf source-to-image.tgz
        mv s2i /usr/local/bin/
        
        var_date=$(date '+%Y-%m-%d-%H%M')
        echo $var_date
        
        rm -rf /data/ccn/static-html
        mkdir -p /data/ccn/static-html/files
        cd /data/ccn/static-html/files
        
        download_url() {
          # https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css
          var_url=$1
        
          # bootstrap/3.3.5/css/bootstrap.min.css
          var_file=${var_url#*.*/}
          
          # bootstrap/3.3.5/css
          var_path=${var_file%/*}
          
          mkdir -p $var_path
          wget -O $var_file $var_url
        
        }
        
        download_url https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css
        download_url https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css
        download_url https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css
        download_url https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js
        download_url https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css
        
        download_url https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.map
        download_url https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.map
        download_url https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js
        
        download_url https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff
        download_url https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf
        
        download_url https://cdnjs.cloudflare.com/ajax/libs/patternfly/3.24.0/css/patternfly.min.css
        download_url https://cdnjs.cloudflare.com/ajax/libs/patternfly/3.24.0/css/patternfly-additions.min.css
        download_url https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.js
        download_url https://cdnjs.cloudflare.com/ajax/libs/jquery-timeago/1.6.1/jquery.timeago.min.js
        
        wget -O jquery-3.2.1.min.js     https://code.jquery.com/jquery-3.2.1.min.js
        wget -O jquery-latest.min.js    http://code.jquery.com/jquery-latest.min.js
        
        mkdir -p bootstrap/3.3.5/fonts/
        wget -O bootstrap/3.3.5/fonts/glyphicons-halflings-regular.woff2  https://raw.githubusercontent.com/wangzheng422/docker_env/dev/redhat/ocp4/4.4/ccn/glyphicons-halflings-regular.woff2
        wget -O bootstrap/3.3.5/fonts/glyphicons-halflings-regular.woff https://raw.githubusercontent.com/wangzheng422/docker_env/dev/redhat/ocp4/4.4/ccn/glyphicons-halflings-regular.woff
        wget -O bootstrap/3.3.5/fonts/glyphicons-halflings-regular.ttf https://raw.githubusercontent.com/wangzheng422/docker_env/dev/redhat/ocp4/4.4/ccn/glyphicons-halflings-regular.ttf
        
        cd /data/ccn/static-html/
        
        s2i build --rm  files/  registry.redhat.io/rhscl/nginx-114-rhel7:latest  nginx-sample-app
        
        docker tag nginx-sample-app docker.io/wangzheng422/cloudnative-workspaces-quarkus:swap-$var_date
        docker push docker.io/wangzheng422/cloudnative-workspaces-quarkus:swap-$var_date
        echo docker.io/wangzheng422/cloudnative-workspaces-quarkus:swap-$var_date
        
        wget -O mime.types https://raw.githubusercontent.com/wangzheng422/docker_env/dev/redhat/ocp4/4.4/ccn/mime.types
        wget -O nginx.conf https://raw.githubusercontent.com/wangzheng422/docker_env/dev/redhat/ocp4/4.4/ccn/nginx.conf
        
        cat << EOF > nginx.Dockerfile
        FROM docker.io/wangzheng422/cloudnative-workspaces-quarkus:swap-$var_date
        
        USER root
        COPY mime.types /etc/nginx/
        COPY nginx.conf /etc/nginx/
        
        USER 1001
        EOF
        
        buildah bud --format=docker -t docker.io/wangzheng422/cloudnative-workspaces-quarkus:static-html-$var_date -f nginx.Dockerfile .
        
        buildah push docker.io/wangzheng422/cloudnative-workspaces-quarkus:static-html-$var_date
        echo "docker.io/wangzheng422/cloudnative-workspaces-quarkus:static-html-$var_date"
        
        
        docker image prune -f
        podman image prune -a
        
        # oc -n labs-infra create route edge static-html-0 --service=static-html --hostname=maxcdn.bootstrapcdn.com 
        
        # oc -n labs-infra create route edge static-html-1 --service=static-html   --hostname=ajax.googleapis.com 
        
        # oc -n labs-infra create route edge static-html-2 --service=static-html   --hostname=at.alicdn.com
        
        # oc -n labs-infra create route edge static-html-3 --service=static-html   --hostname=cdnjs.cloudflare.com
        
        # oc -n labs-infra create route edge static-html-4 --service=static-html   --hostname=code.jquery.com

pip for agnosticd


        # on vultr perpare pip
        
        # https://www.linuxtechi.com/use-ansible-galaxy-roles-ansible-playbook/
        
        # https://docs.ansible.com/ansible/latest/scenario_guides/guide_kubernetes.html
        
        # https://stackoverflow.com/questions/11091623/how-to-install-packages-offline
        
        # https://www.activestate.com/resources/quick-reads/how-to-update-all-python-packages/
        
        # yum install -y python2-pip
        
        mkdir -p /data/pip3
        cd /data/pip3
        
        # pip install --upgrade pip
        
        pip3 install --user --upgrade kubernetes openshift requests
        pip3 freeze --user > requirements.txt
        
        # pip3 install -r requirements.txt --upgrade
        
        mkdir -p wheelhouse
        pip3 download -r requirements.txt -d wheelhouse
        /bin/cp -f requirements.txt wheelhouse/
        tar -zcf wheelhouse.tar.gz wheelhouse
        
        
        var_date=$(date '+%Y-%m-%d')
        echo $var_date
        
        buildah from --name onbuild-container scratch
        buildah copy onbuild-container wheelhouse.tar.gz /
        buildah umount onbuild-container 
        buildah commit --rm --format=docker onbuild-container docker.io/wangzheng422/base-fs:pip3-whl-$var_date
        
        # buildah rm onbuild-container
        
        buildah push docker.io/wangzheng422/base-fs:pip3-whl-$var_date
        echo "docker.io/wangzheng422/base-fs:pip3-whl-$var_date"

nodejs


        # docker.io/wangzheng422/cloudnative-workspaces-quarkus:nodejs-10-2020-07-16-2155
        
        # this docker file is build using nodejs-10.Dockerfile
        
        mkdir -p /data/ccn/nodejs
        cd /data/ccn/nodejs
        
        var_date=$(date '+%Y-%m-%d')
        echo $var_date
        
        wget -O .npmrc https://raw.githubusercontent.com/wangzheng422/docker_env/dev/redhat/ocp4/4.6/ccn/.npmrc
        wget -O .bowerrc https://raw.githubusercontent.com/wangzheng422/docker_env/dev/redhat/ocp4/4.6/ccn/.bowerrc
        wget https://raw.githubusercontent.com/wangzheng422/docker_env/dev/redhat/ocp4/4.6/ccn/nodejs-10.Dockerfile
        
        buildah bud --format=docker -t docker.io/wangzheng422/imgs:nodejs-10-wzh-$var_date -f nodejs-10.Dockerfile .
        buildah push docker.io/wangzheng422/imgs:nodejs-10-wzh-$var_date 
        
        echo "docker.io/wangzheng422/imgs:nodejs-10-wzh-$var_date"
        
        # docker.io/wangzheng422/imgs:nodejs-10-wzh-2021-01-05

build dist

cd /data/ocp4
        wget -O poc.image.list https://raw.githubusercontent.com/wangzheng422/docker_env/dev/redhat/ocp4/4.6/ccn/poc.image.list
        
        export MIRROR_DIR='/data/poc.image'
        /bin/rm -rf ${MIRROR_DIR}
        bash add.image.sh poc.image.list ${MIRROR_DIR}
        

labs sync


        rsync -e ssh --info=progress2 -P --delete -arz bastion.fd21.example.opentlc.com:/data/ccn/nexus/  /data/ccn/nexus/
        
        rsync -e ssh -P --delete -arz root@bastion.fd21.example.opentlc.com:/data/ccn/nexus/  ./nexus/ 
        
        rsync -e ssh -P --delete -arz  ./nexus/  root@192.168.7.11:/data/ccn/nexus/   
        
        chown -R 200:root nexus
        
        rsync -e ssh --info=progress2 -P --delete -arz   192.168.252.11:/data/ccn/nexus/   ./nexus/   
        
        

other tips

find object blocks deleting namespace/project

PROJECT_NAME=user1-cloudnativeapps
        
        oc api-resources --verbs=list --namespaced -o name | xargs -n 1 oc get --show-kind --ignore-not-found -n $PROJECT_NAME
        
        oc api-resources --verbs=list --cached --namespaced -o name | xargs -n 1 oc get --show-kind --ignore-not-found -n $PROJECT_NAME
        
        
        configuration.serving.knative.dev/payment
        service.serving.knative.dev/payment
        route.serving.knative.dev/payment
        

service mesh & knative

oc project istio-system
        oc get pod -o json | jq -r '.items[].spec.containers[].image' > tmp.list
        
        oc project istio-operator
        oc get pod -o json | jq -r '.items[].spec.containers[].image' >> tmp.list
        
        oc project knative-eventing
        oc get pod -o json | jq -r '.items[].spec.containers[].image' >> tmp.list
        
        oc project knative-serving
        oc get pod -o json | jq -r '.items[].spec.containers[].image' >> tmp.list
        
        oc project tekton-pipelines
        oc get pod -o json | jq -r '.items[].spec.containers[].image' >> tmp.list
        
        oc get pod -o json | jq -r '.items[].spec.initContainers[].image' >> tmp.list
        
        oc project openshift-operators
        oc get pod -o json | jq -r '.items[].spec.containers[].image' >> tmp.list
        
        
        
        cat tmp.list | sort | uniq
        
        oc project user0-catalog
        oc get pod -o json | jq -r '.items[].spec.containers[].image'| sort | uniq 
        

以下是弯路

build github clone site, using gitlab

yum -y install podman
        
        rm -rf /data/ccn/gitlab
        mkdir -p /data/ccn/gitlab/config
        mkdir -p /data/ccn/gitlab/logs
        mkdir -p /data/ccn/gitlab/data
        
        
        # podman run --detach \
        
        #   --hostname local.redhat.ren \
        
        #   --env GITLAB_OMNIBUS_CONFIG="external_url 'http://local.redhat.ren:7080/'; gitlab_rails['lfs_enabled'] = true;" \
        
        #   --publish 7443:443 --publish 7080:80 --publish 7022:22 \
        
        #   --name gitlab \
        
        #   --restart always \
        
        #   --volume /data/ocp4/demo/gitlab/config:/etc/gitlab:Z \
        
        #   --volume /data/ocp4/demo/gitlab/logs:/var/log/gitlab:Z \
        
        #   --volume /data/ocp4/demo/gitlab/data:/var/opt/gitlab:Z \
        
        #   gitlab/gitlab-ce:latest
        
        podman run --detach \
          --hostname local.redhat.ren \
          --publish 7443:443 --publish 7080:80 --publish 7022:22 \
          --name gitlab \
          --restart always \
          --volume /data/ccn/gitlab/config:/etc/gitlab:Z \
          --volume /data/ccn/gitlab/logs:/var/log/gitlab:Z \
          --volume /data/ccn/gitlab/data:/var/opt/gitlab:Z \
          gitlab/gitlab-ce:latest
        
        # set default username / password
        
        # root / redhat2019
        
        podman stop gitlab
        
        podman rm -fv gitlab
        
        cd /data/ccn
        
        # tar zcf gitlab.tgz ./gitlab 
        
        cat << EOF > /data/ccn/gitlab.files.Dockerfile
        FROM registry.redhat.io/ubi7/ubi
        COPY gitlab /gitlab
        EOF
        podman build --no-cache -f /data/ccn/gitlab.files.Dockerfile -t quay.io/wangzheng422/gitlab-fs /data/ccn/
        podman push quay.io/wangzheng422/gitlab-fs
        
        podman exec -it gitlab update-permissions
        podman restart gitlab
        podman logs -f gitlab
        getfacl /data/ccn/gitlab/
        
        # now we try to use it
        
        rm -rf /data/ccn/gitlab
        podman run -d --name gitlab-fs --entrypoint "tail" quay.io/wangzheng422/gitlab-fs -f /dev/null
        podman cp gitlab-fs:/gitlab /data/ccn/
        podman rm -fv gitlab-fs
        
        # tar zxf gitlab.tgz
        
        # chown -R root: /data/ccn/gitlab/