Ptunnel for Alpine

最近更新真是越来越。。。。算了,今晚解决了一个历史遗留问题——以前构建Ptunnel都是依赖Debian、Ubuntu这些镜像。体积大,耗流量。之所以没有基于Alpine是因为这份代码是十多年前的,在Alpine下构建不能通过,而我又不懂C语言,所以就搁置了。然后今晚抱着玩玩的心态,改了一下源码(瞎改)。。。。

结果,居然编译通过了,通过了,过了,了。。。。

主要的依赖可以一个个慢慢摸索,其中“艰辛”就不说了,主要麻烦是一个名为unistd.h的文件不能引入,然后查了不少资料,原来改名了,现在叫做asm/unistd.h,而以前叫做sys/unistd.h,解决了这个问题,其他依赖再理一理就没什么大问题了(虽然编译过程还有一个警告,但是我们“无视警告”,笑)。

最后来个小贴士(以前好像说过):
Alpine构建可以使用--virtual参数指定构建过程需要安装的包,这样构建的镜像体积会小很多。
举个例子:

RUN apk add build-base
RUN apk del build-base

上面这种方式看似是删除了build-base这个包,但并不会减少镜像体积,原因很简单,安装过程被记录保存下来了(Docker原理以前讲过,省些字数)。

使用下面的方式:

RUN apk add --virtual BUILD build-base && \
    apk del BUILD

build-base这个包不会被记录下来,可以减少150MB的体积呐~

同一个软件第一种方式构建体积有160MB,第二种方式只有9MB,压缩传输体积更加小。

REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
zuolan/ptunnel                  local               0cc925b779da        3 minutes ago       9.23 MB
                                        36a25dbadd2b        6 minutes ago       160 MB

最后附上修改后 Ptunnel 源代码:
https://github.com/izuolan/dockerfiles

部分 Dockerfile:

FROM alpine:edge
COPY . /build
WORKDIR /build
RUN echo '@edge http://nl.alpinelinux.org/alpine/edge/main' >> /etc/apk/repositories && \
    echo '@community http://nl.alpinelinux.org/alpine/edge/community' >> /etc/apk/repositories && \
    echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >> /etc/apk/repositories && \
    apk add --no-cache \
    libpcap-dev \
    linux-headers && \
    apk add --no-cache --virtual BUILD build-base && \
    make && make install && \
    apk del BUILD

如何使用这个玩意?管理Ptunnel的脚本:https://github.com/izuolan/Pshell

你可能感兴趣的:(Ptunnel for Alpine)