修复 modprobe 报错

This commit is contained in:
bjdgyc 2023-12-25 14:31:35 +08:00
parent 64404ea94b
commit d3f16eb2ad
8 changed files with 130 additions and 55 deletions

View File

@ -6,10 +6,13 @@ echo $ver
#docker login -u bjdgyc #docker login -u bjdgyc
#docker build -t bjdgyc/anylink . #docker build -t bjdgyc/anylink .
docker build -t bjdgyc/anylink -f docker/Dockerfile .
docker build -t bjdgyc/anylink --build-arg GitCommitId=$(git rev-parse HEAD) -f docker/Dockerfile .
docker tag bjdgyc/anylink:latest bjdgyc/anylink:$ver docker tag bjdgyc/anylink:latest bjdgyc/anylink:$ver
exit 0
docker push bjdgyc/anylink:$ver docker push bjdgyc/anylink:$ver
docker push bjdgyc/anylink:latest docker push bjdgyc/anylink:latest

View File

@ -9,37 +9,39 @@
## Donator ## Donator
> 感谢以下同学的打赏AnyLink 有你更美好! > 感谢以下同学的打赏AnyLink 有你更美好!
> >
> 需要展示主页的同学可以在QQ群 直接联系我添加。 > 需要展示主页的同学可以在QQ群 直接联系我添加。
| 昵称 | 主页 | | 昵称 | 主页 / 留言 |
|---------| ---------------------------- | |-----------|------------------------------|
| 代码 oo8 | | | 代码 oo8 | |
| 甘磊 | https://github.com/ganlei333 | | 甘磊 | https://github.com/ganlei333 |
| Oo@ | https://github.com/chooop | | Oo@ | https://github.com/chooop |
| 虚极静笃 | | | 虚极静笃 | |
| 请喝可乐 | | | 请喝可乐 | |
| 加油加油 | | | 加油加油 | |
| 李建 | | | 李建 | |
| lanbin | | | lanbin | |
| 乐在东途 | | | 乐在东途 | |
| 孤鸿 | | | 孤鸿 | |
| 刘国华 | | | 刘国华 | |
| 改名好无聊 | | | 改名好无聊 | |
| 全能互联网专家 | | | 全能互联网专家 | |
| JCM | | | JCM | |
| Eh... | | | Eh... | |
| 沉 | | | 沉 | |
| 刘国华 | | | 刘国华 | |
| 忧郁的豚骨拉面 | | | 忧郁的豚骨拉面 | |
| 张小旋当爹地 | | | 张小旋当爹地 | |
| 对方正在输入 | | | 对方正在输入 | |
| Ronny | | | Ronny | |
| 奔跑的少年 | | | 奔跑的少年 | |
| ZBW | | | ZBW | |
| 悲鸣 | | | 悲鸣 | |
| 谢谢 | | | 谢谢 | |
| 云思科技 | | | 云思科技 | |
| 哆啦A伟(张佳伟) | |
| nobody | 开源不易,感谢分享 |

View File

@ -1,42 +1,48 @@
#node:16-bullseye
#golang:1.20-bullseye
#debian:bullseye-slim
# web # web
FROM node:16.17.1-alpine3.15 as builder_node FROM node:16-alpine3.18 as builder_node
WORKDIR /web WORKDIR /web
COPY ./web /web COPY ./web /web
RUN yarn install \ RUN yarn install \
&& yarn run build \ && yarn run build \
&& ls /web/ui && ls /web/ui
# server # server
FROM golang:1.19-alpine as builder_golang FROM golang:1.20-alpine3.18 as builder_golang
#TODO 本地打包时使用镜像 #TODO 本地打包时使用镜像
ENV GOPROXY=https://goproxy.io ENV GOPROXY=https://goproxy.cn
ENV GOOS=linux ENV GOOS=linux
ARG GitCommitId="gitCommitId"
WORKDIR /anylink WORKDIR /anylink
COPY . /anylink COPY server /anylink
COPY --from=builder_node /web/ui /anylink/server/ui COPY --from=builder_node /web/ui /anylink/ui
#TODO 本地打包时使用镜像 #TODO 本地打包时使用镜像
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
RUN apk add --no-cache git gcc musl-dev RUN apk add gcc musl-dev
RUN cd /anylink/server;go mod tidy;go build -o anylink -ldflags "-X main.CommitId=$(git rev-parse HEAD)" \ RUN cd /anylink;go mod tidy;go build -o anylink -ldflags "-s -w -X main.CommitId=${GitCommitId}" \
&& /anylink/server/anylink tool -v && /anylink/anylink tool -v
# anylink # anylink
FROM alpine FROM alpine:3.18
LABEL maintainer="github.com/bjdgyc" LABEL maintainer="github.com/bjdgyc"
#ENV IPV4_CIDR="192.168.10.0/24" ENV ANYLINK_IN_CONTAINER=true
WORKDIR /app WORKDIR /app
COPY --from=builder_golang /anylink/server/anylink /app/ COPY --from=builder_golang /anylink/anylink /app/
COPY docker/docker_entrypoint.sh /app/ COPY docker/docker_entrypoint.sh /app/
COPY ./server/bridge-init.sh /app/
#COPY ./server/bridge-init.sh /app/
COPY ./server/conf /app/conf COPY ./server/conf /app/conf
COPY ./LICENSE /app/LICENSE COPY ./LICENSE /app/LICENSE
COPY ./home /app/home COPY ./home /app/home
#TODO 本地打包时使用镜像 #TODO 本地打包时使用镜像
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
RUN apk add --no-cache bash iptables \ RUN apk add --no-cache bash iptables \

View File

@ -3,5 +3,5 @@ package base
const ( const (
APP_NAME = "AnyLink" APP_NAME = "AnyLink"
// app版本号 // app版本号
APP_VER = "0.9.4" APP_VER = "0.10.1"
) )

65
server/base/mod.go Normal file
View File

@ -0,0 +1,65 @@
package base
import (
"bufio"
"fmt"
"log"
"os"
"os/exec"
"strings"
)
const (
procModulesPath = "/proc/modules"
inContainerKey = "ANYLINK_IN_CONTAINER"
)
var (
inContainer = false
modMap = map[string]struct{}{}
)
func initMod() {
container := os.Getenv(inContainerKey)
if container == "true" {
inContainer = true
}
log.Println("inContainer", inContainer)
file, err := os.Open(procModulesPath)
if err != nil {
err = fmt.Errorf("[ERROR] Problem with open file: %s", err)
panic(err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
scanner.Split(bufio.ScanLines)
for scanner.Scan() {
splited := strings.Split(scanner.Text(), " ")
if len(splited[0]) > 0 {
modMap[splited[0]] = struct{}{}
}
}
}
func CheckModOrLoad(mod string) {
log.Println("CheckModOrLoad", mod)
if _, ok := modMap[mod]; ok {
return
}
if inContainer {
err := fmt.Errorf("Linux modules %s is not loaded, please run `modprobe %s`", mod, mod)
panic(err)
}
cmdstr := fmt.Sprintln("modprobe", mod)
cmd := exec.Command("sh", "-c", cmdstr)
b, err := cmd.CombinedOutput()
if err != nil {
log.Println(string(b))
panic(err)
}
}

View File

@ -4,6 +4,7 @@ func Start() {
execute() execute()
initCfg() initCfg()
initLog() initLog()
initMod()
} }
func Test() { func Test() {

View File

@ -22,9 +22,10 @@ func checkTun() {
defer ifce.Close() defer ifce.Close()
// 测试ip命令 // 测试ip命令
cmdstr0 := fmt.Sprintln("modprobe -i tun") base.CheckModOrLoad("tun")
cmdstr1 := fmt.Sprintf("ip link set dev %s up mtu %s multicast off", ifce.Name(), "1399") cmdstr1 := fmt.Sprintf("ip link set dev %s up mtu %s multicast off", ifce.Name(), "1399")
err = execCmd([]string{cmdstr0, cmdstr1}) err = execCmd([]string{cmdstr1})
if err != nil { if err != nil {
base.Fatal("testTun err: ", err) base.Fatal("testTun err: ", err)
} }
@ -41,12 +42,8 @@ func checkTun() {
} }
// 修复 rockyos nat 不生效 // 修复 rockyos nat 不生效
cmdstr0 := fmt.Sprintln("modprobe -i iptable_filter") base.CheckModOrLoad("iptable_filter")
cmdstr1 := fmt.Sprintf("modprobe -i iptable_nat") base.CheckModOrLoad("iptable_nat")
err = execCmd([]string{cmdstr0, cmdstr1})
if err != nil {
base.Fatal("testTun err: ", err)
}
natRule := []string{"-s", base.Cfg.Ipv4CIDR, "-o", base.Cfg.Ipv4Master, "-j", "MASQUERADE"} natRule := []string{"-s", base.Cfg.Ipv4CIDR, "-o", base.Cfg.Ipv4Master, "-j", "MASQUERADE"}
forwardRule := []string{"-j", "ACCEPT"} forwardRule := []string{"-j", "ACCEPT"}

View File

@ -33,13 +33,14 @@ func checkMacvtap() {
ifName := "anylinkMacvtap" ifName := "anylinkMacvtap"
// 加载 macvtap // 加载 macvtap
cmdstr0 := fmt.Sprintln("modprobe -i macvtap") base.CheckModOrLoad("macvtap")
// 开启主网卡混杂模式 // 开启主网卡混杂模式
cmdstr1 := fmt.Sprintf("ip link set dev %s promisc on", base.Cfg.Ipv4Master) cmdstr1 := fmt.Sprintf("ip link set dev %s promisc on", base.Cfg.Ipv4Master)
// 测试 macvtap 功能 // 测试 macvtap 功能
cmdstr2 := fmt.Sprintf("ip link add link %s name %s type macvtap mode bridge", base.Cfg.Ipv4Master, ifName) cmdstr2 := fmt.Sprintf("ip link add link %s name %s type macvtap mode bridge", base.Cfg.Ipv4Master, ifName)
cmdstr3 := fmt.Sprintf("ip link del %s", ifName) cmdstr3 := fmt.Sprintf("ip link del %s", ifName)
err := execCmd([]string{cmdstr0, cmdstr1, cmdstr2, cmdstr3}) err := execCmd([]string{cmdstr1, cmdstr2, cmdstr3})
if err != nil { if err != nil {
base.Fatal(err) base.Fatal(err)
} }