• Gogs的交叉编译与配置


    Gogs的交叉编译与配置

    gogs官方的版本,已经有一年未发布Release版本了。

    因此需要手工交叉编译一个Gogs来,Gogs与Gitea的编译很类似。

    1.环境

    Host环境:Ubuntu 18.04.5 (PC)

    编译工具链:arm-himix200-linux(解包自arm-himix200-linux.tgz,据说来自Hi3516dv300SDK),海思提供的arm编译工具链

    环境变量:执行命令:export PATH=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin:$PATH

    编译器arm-himix200-linux默认输出的ELF格式为private flags = 5000200: [Version5 EABI] [soft-float ABI],与ubuntu-armhf的格式private flags = 5000400: [Version5 EABI] [hard-float ABI]不兼容(soft-float ABI与hard-float ABI的传参规则不一样,因此会不兼容)。

    编译办法:

    CGO_ENABLED=1 CC=arm-himix200-linux-gcc PATH=$PATH:~/XXX/go/bin GOOS=linux GOARCH=arm GOARM=7 TAGS="cert" make build
    

    此时编译后,由于默认CC编译器的选项是生成5000200软浮点ABI,所以gitea出来的格式也是5000200。

    需要首先将Makefile中调用go generate生成bindata的部分代码修改调整一下

    sed -i 's|go generate|CC= GOOS= GOARCH= CGO_ENABLED=0 CGO_CFLAGS= CGO_CXXFLAGS= CGO_CPPFLAGS= CGO_LDFLAGS= go generate|g' Makefile
    

    然后再执行make build构建命令

    CGO_ENABLED=1 CGO_CFLAGS="-mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4" CGO_CXXFLAGS="-mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4" CGO_CPPFLAGS="-mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4" CGO_LDFLAGS="-mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4" CC=arm-himix200-linux-gcc PATH=$PATH:~/XXX/go/bin GOOS=linux GOARCH=arm GOARM=7 TAGS="cert" make build
    

    此时,生成的gogs程序

    gogs编译后,会生成一个打包的应用,需要参考官方文档添加相应服务文件、配置文件等。

    编译时,如果github等网站访问不畅,可以配置goproxy,如下:

     export GOPROXY=https://goproxy.io,direct
    

    1.1服务文件

    [Unit]
    Description=Gogs -- A painless self-hosted Git service
    After=syslog.target
    After=network.target
    #After=mariadb.service mysqld.service postgresql.service memcached.service redis.service
    
    [Service]
    # Modify these two values and uncomment them if you have
    # repos with lots of files and get an HTTP error 500 because
    # of that
    ###
    #LimitMEMLOCK=infinity
    #LimitNOFILE=65535
    Type=simple
    User=git
    Group=git
    WorkingDirectory=/data/git
    ExecStart=/data/app/bin/gogs web --config /data/app/etc/gogs.app.ini
    Restart=always
    Environment=USER=git HOME=/data/git
    
    # Some distributions may not support these hardening directives. If you cannot start the service due
    # to an unknown option, comment out the ones not supported by your version of systemd.
    ProtectSystem=full
    PrivateDevices=yes
    PrivateTmp=yes
    NoNewPrivileges=true
    
    [Install]
    WantedBy=multi-user.target
    

    1.2配置文件

    [server]
    
    [repository]
    ; The root path for storing managed repositories, default is "~/gogs-repositories"
    ROOT = /data/git/gogs-repositories
    
    [database]
    ; The database backend, either "postgres", "mysql" "sqlite3" or "mssql".
    ; You can connect to TiDB with MySQL protocol.
    TYPE = sqlite3
    
    [auth]
    ; Whether to disable self-registration. When disabled, accounts would have to be created by admins.
    DISABLE_REGISTRATION = true
    
    [admin]
    ; Whether to disable regular (non-admin) users to create organizations.
    DISABLE_REGULAR_ORG_CREATION = false
    
    [git]
    
    [git.timeout]
    
    [mirror]
    

    1.3添加用户

    sudo useradd -U git -m /home/git
    

    查看gogs的默认编译要求如下:

    go 1.14 or higher, see here
    make, see here
    

    2.配置

    gogs编译好后,单独调试通过,准备集成到网站中。网站中已有typecho、nextcloud服务,通过nginx的子目录方式。

    因此增加nginx的location配置:

        location ^~ /gogs/ {
    
            # 日志文件分开
            error_log     /var/log/nginx/gogs.error.log;
            access_log    /var/log/nginx/gogs.access.log;
        
            # 注意: 反向代理后端 URL 的最后需要有一个路径符号
            proxy_pass http://127.0.0.1:3000/;
    
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr; # 设置请求源地址
            proxy_set_header X-Forwarded-Proto $scheme; # 设置Http协议
            add_header X-Cache $upstream_cache_status;
            #Set Nginx Cache
            add_header Cache-Control no-cache;
            #expires 12h;
        }
    

    重启nginx的服务。

    修改gogs配置app.ini文件中的ROOT_URL(如果服务器的域名可用,则将公网IP替换成域名)。

    [server]
    EXTERNAL_URL = http://aaa.bbb.ccc.ddd/gogs/
    HTTP_PORT = 3000
    
    [git]
    PATH =
    

    重启gogs服务。

    即可用http://aaa.bbb.ccc.ddd/gogs/地址访问gogs提供的服务了。

  • 相关阅读:
    EasyPR--开发详解(7)字符分割
    EasyPR--开发详解(5)颜色定位与偏斜扭转
    EasyPR--开发详解(6)SVM开发详解
    从机器学习
    EasyPR--开发详解(4)形态学操作、尺寸验证、旋转等操作
    C#winform使用进度条
    c#数据库设计--1、概述
    C# 全文搜索Lucene
    C#:ORM--实体框架EF(entity framework)(2)
    C#访问MySQL数据库(winform+EF)
  • 原文地址:https://www.cnblogs.com/eaglexmw/p/15693743.html
Copyright © 2020-2023  润新知