没有装Docker如何从镜像中释放出文件

用 kubernetes 越多,用 docker 越多,就愈发感觉到好处多多。 简简单单的一个可执行文件,用 docker 基板 alphine 封装,就可以运行起一个 pod ,然后指定 deployment、svc、ingress,就可以将服务暴露出去。 其实很多情况下单可执行文件 + systemd也是不错的选择。 这不就遇到个问题,ghostunnel 这个软件,github 只释放出了源代码以及 windows 、linux 和 mac 的三个可执行版本。 可我的执行环境是 nanopi ,是个 arm7 的架构,就无计可施了。 无奈下,在 nanopi 上装了 go ,编译了个 arm7 的出来。 但是遇到 vaultwanden ,rust 的,就没法弄了,vps 太弱,根本无法用 cargo 编译。 那怎么办呢?方法如下,不安装 Docker ,也可以把镜像中的文件抽取出来 $ mkdir vm $ wget https://raw.githubusercontent.com/jjlin/docker-image-extract/main/docker-image-extract $ chmod +x docker-image-extract $ ./docker-image-extract vaultwarden/server:alpine Getting API token... Getting image manifest for vaultwarden/server:alpine... Fetching and extracting layer a0d0a0d46f8b52473982a3c466318f479767577551a53ffc9074c9fa7035982e... Fetching and extracting layer 3a9a529931676767ec84d35ab19774b24bd94e20f6fff7e6bda57ef5f2a66cfc... Fetching and extracting layer f9dcfa9aefe67ce52ab2a73e515ea715d242348b8fc338dbe4ca72a853ea0318... Fetching and extracting layer 4249d8cece35148b5faca2c6a98d566a271a1996b127b14480793ee8825e43c0... Fetching and extracting layer 72f4873a62cc82eaf28905077df3791e3b235bf5d17670e7aff6d5fb5e280739... Fetching and extracting layer 8eb772c524f9d998c8c7c92acc5ba96e3e9ebfb175dbb2441fe6e7b7598874f5... Fetching and extracting layer 663794f103b44abb8a90e1376dce14735905e2f938b4ca7e0ff379b09cbf6148... Image contents extracted into ./output. 这样我们就可以在 output 目录下得到 vaultwarden 和 web-vault ...

2021年10月27日

Bitwarden(vaultwarden)如何在非Docker环境下安装使用

为什么会有非 Docker 环境这个怪字眼呢? 无他,因为满网搜索到的教程都是在 Docker 环境下安装使用。 但是穷啊,八戒的 vps 是个单核 500m 的 justhost 机器,便宜的很,这种廉价机器来跑 Docker,基本要占100M,跑不太动。 这种一穷二白的环境,就只能把 Bitwarden 从容器里拆出来用。 好在 Bitwarden_rs 是一个 rust 程序,占内存(16M左右)和cpu极少,本身就适合在 systemd 环境下跑。 这里就利用 vaultwarden 和 traefik,在一台老破小服务器上运行。 系统环境是 CentOS 7.9 步骤如下: 一、下载bitwarden(vaultwarden) wget https://github.com/dani-garcia/vaultwarden/archive/refs/tags/1.23.0.tar.gz 二、安装cargo并编译(可选) yum install -y epel-release yum install -y openssl-devel cargo cd vaultwarden-1.23.0 cargo build --release --features sqlite 直接爆错啊,小小的 vps 连编译都过不去,编译进程都被 kill 掉了 三、下载vaultwarden主文件 编译不通,就只能想别的办法了。Faint 找一台有 docker 机器,从里面把文件都解析出来好了 docker pull vaultwarden/server:alpine docker create --name vw vaultwarden/server:alpine docker cp vw:/vaultwarden . docker cp vw:/web-vault . docker rm vw 这样会得到一个可执行文件 vaultwarden 和一个目录 web-vault ...

2021年10月27日

阿里云ACK完全生产环境规划和搭建

在生产环境来创建阿里ACK托管k8s集群的过程: 完全用于生产,不是搭建来做测试用的。 授公司委托,给的RAM用户,所以阿里云RAM第一次登录后,强制修改密码 然后授权资源管理, 正式开始建立过程 一、准备条件 两台及以上ecs服务器 阿里云账户余额100元以上(阿里云要求) 阿里云oss一个(oss和ecs在一个区域最好) 首先阿里云创建k8s集群要求至少有两台ecs服务器,可以创建集群的时候再购买,不要预先购买。 二、下面开始创建: 阿里云最左上角的菜单(新版本首页)->产品与服务->容器服务kubernetes版本 第一次创建会让开启ram授权,正常点击授权就可以 点击创建集群 点击后如下 各个选项的详细说明: 第一部分: 集群版本: 最上面可以选择ACK托管版,和其他4个版本,着重说一下专有版和托管版的区别 专有版本:master和worker都需要自己创建,如果需要高可用,那么master需要至少三个,也就是说,如果你不想把master和worker放在同一台服务器上,就要多使用三台服务器。 ACK托管版:master由阿里云给创建,自己只需要购买worker服务器。 集群名称: k8s-hbb 地域: 请选择自己ecs和rds等资源所在区域,这里是华东2(上海) Kubernetes版本:阿里云已经做好充分的测试了,所以选择默认的即可。这里是 1.18.8-aliyun.1 容器运行时: Docker 19.03.5 第二部分: 专有网络: 专有网络选择和ecs,rds同一个专有网络,这里是vpc-uf6pcr7nvp3dqmx86yyk0,网段是172.19.0.0/16 虚拟交换机: 同一个专有网络下面的交换机是可以互通的,这里新建一个虚拟交换机,网段是172.19.240.0/20 网络插件: 选Flannel,除去阿里云自己的区别描述,还有一点 如果使用flannel插件,则worker端对外,访问外网(比如短信接口等)使用的是worder所在ecs自己的eip或者如果使用的是snat模式,就是snat绑定的eip。如果使用的terway插件则走的就是snat的eip。注意,创建集群成功后,会为集群创建一个对外服务的ingress的slb,worker内部的容器直接对外访问,使用的不是这个slb的ip。slb只是进来的通道。 pod网络 CIDR:为统一起见,10.240.0.0/20 service CIDR:为统一起见,192.168.240.0/20 注意以上 建立好了三个网段,三个网段中均有240字段,便于记忆 ECS(2台):172.19.240.0/20 POD网段:10.240.0.0/20 Service网段:192.168.240.0/20 ​ 节点IP数量:256,指单个节点可运行 Pod 数量的上限。 一定要拉到最大量256 ,弄到16的话,一个节点本身要跑10多个system的pod,就无法跑应用pod了。 ...

2021年10月26日

Centos auto install cdrom自动安装cdrom的制作

之前介绍过如何制作一个 centos live cdrom 系统 那么,某些情况下我们可能无法弄一个 pxe 系统,而只能通过 idrac 挂载 iso 的方式安装系统 该如何去做呢? 步骤如下: 一、下载Centos的minimal安装光盘 wget http://mirrors.163.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso yum install -y mkisofs 二、准备kickstart安装文件 下载: centos7.ks text skipx install auth --useshadow --enablemd5 authconfig --enableshadow --passalgo=sha512 firstboot --disable keyboard us lang en_US.UTF-8 reboot cdrom firewall --disable selinux --disabled services --enabled="chronyd" logging level=info #ignoredisk --only-use=vda ignoredisk --only-use=sda #bootloader --location=mbr --append="net.ifnames=0 biosdevname=0 crashkernel=auto" bootloader --location=mbr --append="crashkernel=auto" rootpw --plaintext Renren2021! timezone Asia/Shanghai --isUtc network --device=lo --hostname=localhost.localdomain user --name=supdev --gid=511 --groups="supdev" --uid=511 --password="Renren2021!" zerombr clearpart --all --initlabel part biosboot --fstype=biosboot --size=1 part /boot --fstype ext4 --size=2048 part swap --asprimary --size=8192 part / --fstype ext4 --size=1 --grow #part biosboot --fstype=biosboot --size=1 #part /boot --fstype ext2 --size 250 #part pv.01 --size 1 --grow #volgroup vg pv.01 #logvol / --vgname=vg --size=1 --grow --fstype ext4 --fsoptions=discard,noatime --name=root #logvol /tmp --vgname=vg --size=1024 --fstype ext4 --fsoptions=discard,noatime --name=tmp #logvol swap --vgname=vg --recommended --name=swap #uefi #partition /boot/efi --asprimary --fstype=vfat --label EFI --size=200 #partition /boot --asprimary --fstype=ext4 --label BOOT --size=500 #partition / --asprimary --fstype=ext4 --label ROOT --size=4096 --grow services --enabled=network reboot %pre parted -s /dev/sda mklabel gpt %end %packages @core @system-admin-tools @additional-devel @virtualization-client @virtualization-platform @virtualization-tools libguestfs-tools-c perl-Sys-Virt qemu-guest-agent qemu-kvm-tools curl dstat expect openssl initscripts ipmitool lrzsz lsof mtools nc nmap perl perl-CPAN procps python screen sysstat systemtap systemtap-client systemtap-devel tcpdump telnet vim wget wsmancli zip chrony kexec-tools net-tools ntp ntpdate man acpid chrony telnet %end 三、准备生成iso的脚本 下载: makeiso.sh ...

2021年10月25日

vsftpd的日志设置

为了研发方便就给他们在内网开通了 vsftpd 的服务。 结果 java 直接有封好的 ftp library 可用,大家就直接用了。 导致任何单独的一个文件上传都会起一个 ftp 实例,没有复用 ftp 的 socket 链接 。系统挤压了大量的socket连接。 烦恼啊,出了事就麻烦。需要把日志都详细记下来 做法如下: vi /etc/vsftp/vsftpd.conf ...... dual_log_enable=YES log_ftp_protocol=YES xferlog_enable=YES xferlog_std_format=NO ...... 解释一下: dual_log_enable — 和 xferlog_enable 协同,会写两份日志,一份到/var/log/xferlog,一份到/var/log/vsftpd.log log_ftp_protocol — 和 xferlog_enable 协同,同时xferlog_std_format需要设置为NO,这样所有的 FTP 命令都会记录下来。 这样所有人的操作都会被记录下来,就后顾无忧了。

2021年10月25日

PyPXE-一个牛逼的一站式PXE安装包

一般来说,我们要搭建一个正式的pxe自动装机系统,需要装 dnsmasq 做 dhcp + tftp ,需要编译 ipxe 来获得 undionly.kpxe ,需要 http 服务器来提供资源下载,repo 同步服务来提供 repo。组件非常多,也比较麻烦。 当然,这么多也是有必要的,因为可以持续提供一个稳定的装机系统。 场景一换,如果我们在本地机房里,什么都没有,想搭一套环境的步骤就比较繁复了。 PyPXE 就是非常简单的一个程序,居然自己实现了用于 PXE 的 dhcp、tftp 和 http 全部的功能,而且支持 iPXE。 太牛逼了,前提啊,PyPXE 是基于 Python 2.7 的,Python 3.x是运行不了的。 想让它跑起来还必须做一定的修改,步骤如下: 一、下载PyPXE git clone https://github.com/pypxe/PyPXE.git cd PyPXE 下载就行了,不用安装。 二、手动生成config.json配置文件 { "DHCP_SERVER_IP": "192.168.85.27", "DHCP_FILESERVER": "192.168.85.27", "DHCP_OFFER_BEGIN": "192.168.85.200", "DHCP_OFFER_END": "192.168.85.250", "DHCP_SUBNET": "255.255.255.0", "DHCP_ROUTER": "192.168.85.1", "DHCP_DNS": "114.114.114.114", "DHCP_SERVER_PORT": 67, "DHCP_BROADCAST": "", "DHCP_MODE_PROXY": false, "DHCP_WHITELIST": false, "HTTP_PORT": 80, "LEASES_FILE": "", "MODE_DEBUG": "dhcp", "MODE_VERBOSE": "", "NBD_BLOCK_DEVICE": "", "NBD_COPY_TO_RAM": false, "NBD_COW": true, "NBD_COW_IN_MEM": false, "NBD_PORT": 10809, "NBD_SERVER_IP": "0.0.0.0", "NBD_WRITE": false, "NETBOOT_DIR": "netboot", "NETBOOT_FILE": "boot.http.ipxe", "STATIC_CONFIG": "", "SYSLOG_PORT": 514, "SYSLOG_SERVER": null, "USE_DHCP": true, "USE_HTTP": true, "USE_IPXE": true, "USE_TFTP": true } 上面json文件无法加注解,我们把它分三部分 ...

2021年10月22日

ETCD + CONFD + NGINX的配置

上一篇文章我们介绍了 ETCD 的容器化,搞这件事情的主要目的其实是要动态更新 Nginx 的配置 这一章我们就来配置 confd 和 Nginx,来达到动态更新 Nginx 配置的目的 一、安装配置confd 下载并安装: wget https://github.com/kelseyhightower/confd/releases/download/v0.16.0/confd-0.16.0-linux-amd64 mv confd-0.16.0-linux-amd64 /usr/sbin/confd chmod +x /usr/sbin/confd 生成配置文件: 我们在 etcd 中存放的格式如下 etcdctl set /nginx/app01/subdomain app1 etcdctl set /nginx/app01/upstream/app01_1 "192.168.0.1:5601" /nginx/app01/subdomain "app01" /nginx/app01/upstream/app01_1 "192.168.0.1:5601" /nginx/app01/upstream/app01_2 "192.168.0.2:5601" 那么,我们先生成 confd 的配置文件: mkdir -p /etc/confd/{conf.d,templates} cat <<EOF>>/etc/confd/conf.d/nginx.toml [template] src = "nginx.conf.tmpl" dest = "/etc/nginx/conf.d/nginx-auto.conf" keys = [ "/nginx/app01/subdomain", "/nginx/app01/upstream", ] check_cmd = "/usr/sbin/nginx -t" reload_cmd = "/usr/sbin/nginx -s reload" EOF cat <<EOT>>/etc/confd/templates/nginx.conf.tmpl upstream {{getv "/nginx/app01/subdomain"}} { {{range getvs "/nginx/app01/upstream/*"}} server {{.}}; {{end}} } server { server_name {{getv "/nginx/app01/subdomain"}}.example.com; location / { proxy_pass http://{{getv "/nginx/app01/subdomain"}}; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } EOT confd 会根据 etcd 的值,结合 nginx.conf.tmpl ,生成 nginx-auto.conf,然后 nginx -t 验证通过后,执行 nginx -s rolad。 ...

2021年10月21日

etcd单节点应用

由于使用到了阿里的 K8S 托管集群 ACK,于是想占便宜。想用到托管 master node 的 etcd 来保存数据。 结果是,未遂!!无法使用。 阿里有单独的配置管理服务,复杂化了,不想用。 那么解决方案就是,启动只有一个节点副本的 etcd pod,然后数据持久化到 OSS 的 S3 桶中。 一、实现etcd的单节点docker化 首先我们只想在测试环境中跑一个单节点的 etcd,还没有用到 k8s,做法如下: #!/bin/bash NODE1=172.18.31.33 REGISTRY=quay.io/coreos/etcd # available from v3.2.5 #REGISTRY=gcr.io/etcd-development/etcd docker run \ -p 2379:2379 \ -p 2380:2380 \ --volume=/data/etcd:/etcd-data \ --name etcd ${REGISTRY}:latest \ /usr/local/bin/etcd \ --data-dir=/etcd-data --name node1 \ --initial-advertise-peer-urls http://${NODE1}:2380 --listen-peer-urls http://0.0.0.0:2380 \ --advertise-client-urls http://${NODE1}:2379 --listen-client-urls http://0.0.0.0:2379 \ --initial-cluster node1=http://${NODE1}:2380 如上就可以了,容器跑起来以后进入容器测试一下: docker exec -it 425f26903466 /bin/sh etcdctl -C http://127.0.0.1:2379 member list c3511611548b7c7c: name=node1 peerURLs=http://172.18.31.33:2380 clientURLs=http://172.18.31.33:2379 isLeader=true etcdctl ls --recursive / 这样一个单节点的 etcd 就弄好了,对外暴露的是 2379 和 2380 端口 ...

2021年10月21日

Libguestfs的救援手段

在生产环境中我们大量使用了 kvm 的虚拟技术,虚拟机的镜像系统使用的是 Cloud-init 的技术 不可避免的,虚机会遭到各种损坏,维护的手段就十分必要了 假设我们有一个虚机文件 vis-16-41-18.qcow2 坏了 一、安装支持包 yum install libguestfs libguestfs-tools 二、查看日志 virt-log -a vis-16-41-18.qcow2 没有什么特殊的报错信息 三、分析文件系统组成 virt-filesystems和virt-df都可以,用virt-df看的更多一些 virt-filesystems -l -a vis-16-41-18.qcow2 Name Type VFS Label Size Parent /dev/sda1 filesystem ext4 - 209715200 - /dev/sda2 filesystem ext4 - 214536355840 - virt-df -a vis-16-41-18.qcow2 Filesystem 1K-blocks Used Available Use% vis-16-41-18.qcow2:/dev/sda1 194241 31706 152295 17% vis-16-41-18.qcow2:/dev/sda2 206088704 5639856 189973444 3% 四、挂载文件系统开始修复(方法1) 从上面可以看到 vis-16-41-18.qcow2 里面有两个分区,/dev/sda1 和/dev/sda2 第一个应该是/boot,第二个是/ 把 / mount 出来 mkdir 18 guestmount -a vis-16-41-18.qcow2 -m /dev/sda2 --rw ./18 或者全自动mount ...

2021年10月21日

如何用CPU挖狗币Dogecoin

这是个娱乐话题,Dogecoin 狗币在马斯克的吹捧鼓动下,冲上云霄 其实真的用CPU挖币,应该是挖 xmb 门罗币才是对的选择,挖狗币只是娱乐一下 废话不多说,直接放上教程,我的机器是 CentoOS 首先需要有个狗币钱包地址,这个我就不教大家了 一、下载xmrig挖矿软件 下载地址:https://github.com/xmrig/xmrig/releases 我们选择最近的下载就好 二、做好加密通道 我们需要做好一条加密tcp通道 用 ghostunnel, localhost:9999 —> vps:9999 —> rx.unmineable.com:3333 三、用screen后台开挖 screen #./xmrig -o localhost:9999 -a rx -k -u DOGE:狗币地址.矿工名#heyt-3711 ./xmrig -o localhost:9999 -a rx -k -u DOGE:DLR3DZGucJiSdahARW1vV5B1h3WYiw454a.work01 ctrl+a+d 四、查看挖了多少 查看地址:https://unmineable.com/coins/DOGE/address/

2021年10月21日