From f301239398c609de3d4a96be9fcafe698a4a7242 Mon Sep 17 00:00:00 2001 From: Guyi Meng Date: Fri, 13 Dec 2024 23:21:30 +0800 Subject: [PATCH] update --- .../images/GitLab-Install-Docker-1.avif | Bin 0 -> 13361 bytes .../images/GitLab-Install-Docker-cover.avif | Bin 0 -> 26169 bytes src/articles/GitLab-Install-Docker.md | 266 +++++++++++++++++ src/articles/README.md | 3 +- src/articles/friends.md | 2 +- src/en/articles/GitLab-Install-Docker.md | 267 ++++++++++++++++++ src/en/articles/README.md | 3 +- src/en/articles/friends.md | 2 +- 8 files changed, 539 insertions(+), 4 deletions(-) create mode 100644 src/.vuepress/public/assets/images/GitLab-Install-Docker-1.avif create mode 100644 src/.vuepress/public/assets/images/GitLab-Install-Docker-cover.avif create mode 100644 src/articles/GitLab-Install-Docker.md create mode 100644 src/en/articles/GitLab-Install-Docker.md diff --git a/src/.vuepress/public/assets/images/GitLab-Install-Docker-1.avif b/src/.vuepress/public/assets/images/GitLab-Install-Docker-1.avif new file mode 100644 index 0000000000000000000000000000000000000000..4b3f5e1f2bfc5ae2eca45e858baf918672d99a0f GIT binary patch literal 13361 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 literal 0 HcmV?d00001 diff --git a/src/.vuepress/public/assets/images/GitLab-Install-Docker-cover.avif b/src/.vuepress/public/assets/images/GitLab-Install-Docker-cover.avif new file mode 100644 index 0000000000000000000000000000000000000000..28d15c4b20dbde241a6427f9b59af716c47cb4dc GIT binary patch literal 26169 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 Qc+hVt9VB9EwrQ8i9xF+QrvLx| literal 0 HcmV?d00001 diff --git a/src/articles/GitLab-Install-Docker.md b/src/articles/GitLab-Install-Docker.md new file mode 100644 index 0000000..da8a58e --- /dev/null +++ b/src/articles/GitLab-Install-Docker.md @@ -0,0 +1,266 @@ +--- +cover: /assets/images/GitLab-Install-cover.avif +title: GitLab EE 17 Docker 安装破解教程 +icon: download +order: 2 +category: + - 使用指南 + - 教程 + - 网络 + - 破解 +tag: + - GitLab + - Linux + - Git + - Ruby + - Docker + - Debian +--- + +本文讲述了如何使用 [Docker](https://www.docker.com) 来部署 [GitLab](https://gitlab.com) + +通过 GitLab 官方提供的文档我们可以很轻松的通过 Docker 安装 GitLab。 + +本篇文章向你讲述如何通过源代码⽅式在 [Debian 12](https://www.debian.org) 上编译安装 GitLab 并激活企业版功能。 + +## 说明 + +本篇文章的所有命令都是默认你在 `root` 权限下执行的,如果你没有使用 `root` 请根据情况适当在命令前加上 `sudo`。 + +本文中所有的涉及破解,激活的相关内容都是出于研究和学习的目的。请勿用于商业用途!如有需要请购买正版! + +非常建议你在一个可以正常访问 Google 的机器上安装 GitLab 和 Docker。 + +## 准备环境 + +- 安装 Debian 12 +~~这步我就不用说了吧~~ +- 安装 Docker + +````bash +wget -O- https://raw.githubusercontent.com/docker/docker-install/master/install.sh | sh +```` + +如果您在中国大陆可以在执行前加上这句来使用国内镜像加速安装。 + +````bash +export DOWNLOAD_URL="https://mirrors.bfsu.edu.cn/docker-ce" +```` + +- 更改 SSH 端口 + +因为 GitLab 需要使用 22 端口所以我们需要修改服务器的 SSH 端口。(推荐这样做因为不需要在通过 ssh 克隆仓库的时候加上端口号) + +编辑 `/etc/ssh/sshd_config` 将 `Port 22` 改为 `Port 2222` 保存然后执行 `systemctl restart ssh` + +验证一下你是否可以通过新的端口连接服务器。 + +## 开始安装 + +- 创建存放 GitLab 数据的文件夹 + +给配置文件,日志,数据库它们找个位置放起来。可以放在很多地方,例如用户根目录或者是系统根目录。 + +1.创建目录 + +````bash +mkdir -p /opt/gitlab +```` + +如果您使用 root 以外的用户运行 Docker,请向用户授予目录的适当权限。 + +2.配置一个新的环境变量 $GITLAB_HOME,和您创建的目录路径一致 + +````bash +export GITLAB_HOME=/opt/gitlab +```` + +或者,您可以将 `GITLAB_HOME` 环境变量附加到 shell 的配置文件中,以便将其应用于所有将来的终端会话。 + +对于 bash 它的配置文件在 `~/.bash_profile` ,zsh 的在 `~/.zshrc`。 + +GitLab 容器数据文件夹和主机文件夹的映射关系: + +| 本地路径 | 容器内路径 | 用途 | +| --------------------- | --------------- | ----------------- | +| `$GITLAB_HOME/data` | /var/opt/gitlab | 存储应用数据 | +| `$GITLAB_HOME/logs` | /var/log/gitlab | 存储日志 | +| `$GITLAB_HOME/config` | /etc/gitlab | 存储GitLab配置文件 | + +- 创建 Docker Compose 文件 + +创建一个 `docker-compose.yml` 文件,例如: + +````yaml +version: '3.6' +services: + gitlab: + image: gitlab/gitlab-ee + container_name: gitlab + restart: always + hostname: 'gitlab.example.com' + environment: + GITLAB_OMNIBUS_CONFIG: | + # 在这块写其他 gitlab.rb 配置,记得更改默认的 external_url + external_url 'https://gitlab.example.com' + ports: + - '80:80' + - '443:443' + - '22:22' + volumes: + - '$GITLAB_HOME/config:/etc/gitlab' + - '$GITLAB_HOME/logs:/var/log/gitlab' + - '$GITLAB_HOME/data:/var/opt/gitlab' + shm_size: '256m' +```` + +然后执行 + +````bash +docker compose up -d +```` + +或者你还可以使用 Docker Engine 来运行 GitLab 不过这两者是一样的。这里就不再赘述了。 +执行 + +````bash +docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password +```` + +获得安装时生成的 root 密码。 + +之后访问你设置的 `external_url` 就可以访问 GitLab 了! + +![安装好图片](/assets/images/GitLab-Install-Docker-1.avif) + +输入用户名 root 和你获得的 root 密码点击登录进入 GitLab。 + +## 破解 GitLab + +- 使用 GitLab-License-Generator 生成许可证 + +由于 GitLab-License-Generator 被 DMCA takedown 了,所以我们需要手动运行它: + +````bash +apt install ruby-full +gem install bundler +gem install gitlab-license +git clone https://github.com/Lakr233/GitLab-License-Generator.git +cd GitLab-License-Generator +```` + +然后编辑 `src/scan.features.rb` 粘贴以下内容: + +````ruby +#!/usr/bin/env ruby +# encoding: utf-8 + +require 'json' +require 'optparse' + +OptionParser.new do |opts| + opts.banner = "Usage: scan.features.rb [options]" + + opts.on("-s", "--src-dir PATH", "Specify gitlab source dir (required if --features-file is ommited)") do |v| + GITLAB_FEATURES_FILE="#{File.expand_path(v)}/ee/app/models/gitlab_subscriptions/features.rb" + end + + opts.on("-f", "--features-file PATH", "Specify gitlab features path (required if --src-dir is ommited)") do |v| + GITLAB_FEATURES_FILE = File.expand_path(v) + end + + opts.on("-o", "--output PATH", "Output to json file (required)") do |v| + EXPORT_JSON_FILE = File.expand_path(v) + end + + opts.on("-h", "--help", "Prints this help") do + puts opts + exit + end +end +.parse! +if GITLAB_FEATURES_FILE.nil? || EXPORT_JSON_FILE.nil? + puts "[!] missing required options" + puts "[!] use -h for help" + exit 1 +end +puts "Reading features from #{GITLAB_FEATURES_FILE}" + +def ignore_exception + begin + yield + rescue Exception + end +end + +puts "[*] loading features.rb..." +ignore_exception do + require_relative "#{GITLAB_FEATURES_FILE}" +end + +ALL_FEATURES = [] +GitlabSubscriptions::Features.constants.each do |const_name| + puts "[*] gathering features from #{const_name}" + if const_name.to_s.include? 'FEATURE' + ALL_FEATURES.concat(GitlabSubscriptions::Features.const_get(const_name)) + else + puts "[?] unrecognized constant #{const_name}" + end +end + +ALL_FEATURES.uniq! +ALL_FEATURES.sort_by! { |feature| feature } + +puts "[*] total features: #{ALL_FEATURES.size}" + +puts "[*] writing to #{EXPORT_JSON_FILE}" +File.write(EXPORT_JSON_FILE, JSON.pretty_generate(ALL_FEATURES)) + +puts "[*] done" +```` + +生成许可证(按需求修改LICENSE变量): + +````bash +chmod +x src/scan.features.rb +LICENSE_NAME="Tim Cook" +LICENSE_COMPANY="Apple Computer, Inc." +LICENSE_EMAIL="tcook@apple.com" +LICENSE_PLAN="ultimate" +LICENSE_USER_COUNT="2147483647" +LICENSE_EXPIRE_YEAR="2500" +./make.sh +```` + +生成的许可证在 `build` 文件夹下。 + +要使用的文件有 `public.key` 和 `result.gitlab-license`。 + +我们要使用生成的 `public.key` 替换 GitLab 的 `.license_encryption_key.pub`。 + +````bash +docker exec -it gitlab bash +rm /opt/gitlab/embedded/service/gitlab-rails/.license_encryption_key.pub + +# 执行完下面这行将 public.key 的内容粘贴进去按一下回车就将内容写入 .license_encryption_key.pub 了。按 control + c 退出即可 +cat > /opt/gitlab/embedded/service/gitlab-rails/.license_encryption_key.pub + +gitlab-ctl reconfigure +gitlab-ctl restart +```` + +将 `result.gitlab-license` 的内容粘贴至 + +https://你的GitLab域名/admin/application_settings/general 点击 Add License 选择 Enter license key 粘贴你 `result.gitlab-license` 里的内容。 + +选择接受 TOS 点击 Add license。 + +这时候 GitLab 就成功激活了! + +![激活好图片](/assets/images/GitLab-Install-Docker-cover.avif) + +## 参考文献 + +[GitLab 官方文档](https://docs.gitlab.com/ee/install/installation.html) + +[GitLab-License-Generator](https://github.com/Lakr233/GitLab-License-Generator) \ No newline at end of file diff --git a/src/articles/README.md b/src/articles/README.md index 9d316c4..495913e 100644 --- a/src/articles/README.md +++ b/src/articles/README.md @@ -10,4 +10,5 @@ category: - [友情链接](friends.md) - [Hello World!](helloworld.md) -- [GitLab EE 16 安装破解教程](GitLab-Install.md) \ No newline at end of file +- [GitLab EE 16 安装破解教程](GitLab-Install.md) +- [GitLab EE 17 Docker 安装破解教程](GitLab-Install-Docker.md) \ No newline at end of file diff --git a/src/articles/friends.md b/src/articles/friends.md index df9b602..62e19eb 100644 --- a/src/articles/friends.md +++ b/src/articles/friends.md @@ -18,4 +18,4 @@ tag: 如果想申请友链的话 -就先将本站信息添加到您的站点中,之后在评论区告诉我即可。 +就先将本站信息添加到您的站点中,之后给 i@mengguyi.com 发邮件。 diff --git a/src/en/articles/GitLab-Install-Docker.md b/src/en/articles/GitLab-Install-Docker.md new file mode 100644 index 0000000..e5c831c --- /dev/null +++ b/src/en/articles/GitLab-Install-Docker.md @@ -0,0 +1,267 @@ +--- +cover: /assets/images/GitLab-Install-cover.avif +title: GitLab EE 17 Docker install and cracking tutorial +icon: download +order: 2 +category: + - Guide + - Tutorial + - Network + - Crack +tag: + - GitLab + - Linux + - Git + - Ruby + - Docker + - Debian +--- + +This article explains how to use [Docker](https://www.docker.com) to deploy [GitLab](https://gitlab.com) + +Using the official GitLab documentation, we can easily install GitLab via Docker. + +This article explains how to compile and install GitLab from source on [Debian 12](https://www.debian.org) and activate the Enterprise Edition features. + +## Note + +All the commands in this article are assumed to be executed under `root` permission. If you are not using `root`, please add `sudo` before the command as appropriate. + +All the content related to cracking and activation in this article is for research and learning purposes only. Do not use it for commercial purposes! Please buy the official version if you need it. + +It is highly recommended that you compile and install GitLab on a machine that can access Google normally. + +## Prepare the environment + +- Install Debian 12 +~~I don't need to say this, right?~~ +- Install Docker + +````bash +wget -O- https://raw.githubusercontent.com/docker/docker-install/master/install.sh | sh +```` + +If you are in mainland China, you can add this line before execution to use a domestic mirror for faster installation. + +````bash +export DOWNLOAD_URL="https://mirrors.bfsu.edu.cn/docker-ce" +```` + +- Change the SSH Port + +Since GitLab needs to use port 22, we need to change the SSH port of the server (this is recommended because it avoids the need to specify the port number when cloning repositories via SSH). + +Edit `/etc/ssh/sshd_config` and change `Port 22` to `Port 2222`. Save the file and then execute `systemctl restart ssh`. + +Verify that you can connect to the server using the new port. + +## Start Installation + +- Create a folder to store GitLab data + +Find a place to store the configuration files, logs, and database. This can be in various locations, such as the user's home directory or the system root directory. + +1.Create the directory + +````bash +mkdir -p /opt/gitlab +```` + +If you are running Docker as a user other than root, grant the user appropriate permissions for the directory. + +2.Configure a new environment variable $GITLAB_HOME to match the path of the directory you created. + +````bash +export GITLAB_HOME=/opt/gitlab +```` + +Alternatively, you can append the `GITLAB_HOME` environment variable to the shell's configuration file so that it applies to all future terminal sessions. + +For bash, its configuration file is `~/.bash_profile`, and for zsh, it is `~/.zshrc`. + +The mapping relationship between the GitLab container data folder and the host folder: + +| Local location | Container location | Usage | +| --------------------- | --------------- | ----------------- | +| `$GITLAB_HOME/data` | /var/opt/gitlab | Stores application data. | +| `$GITLAB_HOME/logs` | /var/log/gitlab | Stores logs. | +| `$GITLAB_HOME/config` | /etc/gitlab | Stores the GitLab configuration files | + +- Create a Docker Compose file + +Create a `docker-compose.yml` file, for example: + +````yaml +version: '3.6' +services: + gitlab: + image: gitlab/gitlab-ee + container_name: gitlab + restart: always + hostname: 'gitlab.example.com' + environment: + GITLAB_OMNIBUS_CONFIG: | + # Write other gitlab.rb configurations here, and remember to change the default external_url + external_url 'https://gitlab.example.com' + ports: + - '80:80' + - '443:443' + - '22:22' + volumes: + - '$GITLAB_HOME/config:/etc/gitlab' + - '$GITLAB_HOME/logs:/var/log/gitlab' + - '$GITLAB_HOME/data:/var/opt/gitlab' + shm_size: '256m' +```` + +Then execute + +````bash +docker compose up -d +```` + +Alternatively, you can use Docker Engine to run GitLab, but both methods are the same. This will not be elaborated further here. + +Execute + +````bash +docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password +```` + +to obtain the root password generated during installation. + +After that, visit the `external_url` you set to access GitLab! + +![Installation complete](/assets/images/GitLab-Install-Docker-1.avif) + +Enter the username root and the root password you obtained, then click login to access GitLab. + +## Cracking GitLab + +- Use GitLab-License-Generator to generate a license + +Since GitLab-License-Generator has been taken down by a DMCA notice, we need to run it manually: + +````bash +apt install ruby-full +gem install bundler +gem install gitlab-license +git clone https://github.com/Lakr233/GitLab-License-Generator.git +cd GitLab-License-Generator +```` + +Then edit `src/scan.features.rb` and paste the following content: + +````ruby +#!/usr/bin/env ruby +# encoding: utf-8 + +require 'json' +require 'optparse' + +OptionParser.new do |opts| + opts.banner = "Usage: scan.features.rb [options]" + + opts.on("-s", "--src-dir PATH", "Specify gitlab source dir (required if --features-file is ommited)") do |v| + GITLAB_FEATURES_FILE="#{File.expand_path(v)}/ee/app/models/gitlab_subscriptions/features.rb" + end + + opts.on("-f", "--features-file PATH", "Specify gitlab features path (required if --src-dir is ommited)") do |v| + GITLAB_FEATURES_FILE = File.expand_path(v) + end + + opts.on("-o", "--output PATH", "Output to json file (required)") do |v| + EXPORT_JSON_FILE = File.expand_path(v) + end + + opts.on("-h", "--help", "Prints this help") do + puts opts + exit + end +end +.parse! +if GITLAB_FEATURES_FILE.nil? || EXPORT_JSON_FILE.nil? + puts "[!] missing required options" + puts "[!] use -h for help" + exit 1 +end +puts "Reading features from #{GITLAB_FEATURES_FILE}" + +def ignore_exception + begin + yield + rescue Exception + end +end + +puts "[*] loading features.rb..." +ignore_exception do + require_relative "#{GITLAB_FEATURES_FILE}" +end + +ALL_FEATURES = [] +GitlabSubscriptions::Features.constants.each do |const_name| + puts "[*] gathering features from #{const_name}" + if const_name.to_s.include? 'FEATURE' + ALL_FEATURES.concat(GitlabSubscriptions::Features.const_get(const_name)) + else + puts "[?] unrecognized constant #{const_name}" + end +end + +ALL_FEATURES.uniq! +ALL_FEATURES.sort_by! { |feature| feature } + +puts "[*] total features: #{ALL_FEATURES.size}" + +puts "[*] writing to #{EXPORT_JSON_FILE}" +File.write(EXPORT_JSON_FILE, JSON.pretty_generate(ALL_FEATURES)) + +puts "[*] done" +```` + +Generate the license (modify the LICENSE variable as needed): + +````bash +chmod +x src/scan.features.rb +LICENSE_NAME="Tim Cook" +LICENSE_COMPANY="Apple Computer, Inc." +LICENSE_EMAIL="tcook@apple.com" +LICENSE_PLAN="ultimate" +LICENSE_USER_COUNT="2147483647" +LICENSE_EXPIRE_YEAR="2500" +./make.sh +```` + +The generated license is in the `build` folder. + +The files to use are `public.key` and `result.gitlab-license`. + +We need to replace GitLab's `.license_encryption_key.pub` with the generated `public.key`. + +````bash +docker exec -it gitlab bash +rm /opt/gitlab/embedded/service/gitlab-rails/.license_encryption_key.pub + +# After executing the following line, paste the contents of public.key and press Enter to write the contents into .license_encryption_key.pub. Press Control + C to exit. +cat > /opt/gitlab/embedded/service/gitlab-rails/.license_encryption_key.pub + +gitlab-ctl reconfigure +gitlab-ctl restart +```` + +Paste the contents of `result.gitlab-license` into + +https://yourGitLabDomain/admin/application_settings/general Click Add License, select Enter license key, and paste the contents from `result.gitlab-license`. + +Accept the TOS and click Add license. + +At this point, GitLab will be successfully activated! + +![activated](/assets/images/GitLab-Install-Docker-cover.avif) + +## References + +[GitLab Docs](https://docs.gitlab.com/ee/install/installation.html) + +[GitLab-License-Generator](https://github.com/Lakr233/GitLab-License-Generator) \ No newline at end of file diff --git a/src/en/articles/README.md b/src/en/articles/README.md index 1c9df90..cbd4b7e 100644 --- a/src/en/articles/README.md +++ b/src/en/articles/README.md @@ -10,4 +10,5 @@ category: - [Friendly link](friends.md) - [Hello World!](helloworld.md) -- [GitLab EE 16 install and cracking tutorial](GitLab-Install.md) \ No newline at end of file +- [GitLab EE 16 install and cracking tutorial](GitLab-Install.md) +- [GitLab EE 17 Docker install and cracking tutorial](GitLab-Install-Docker.md) \ No newline at end of file diff --git a/src/en/articles/friends.md b/src/en/articles/friends.md index a4fc6c6..15122ff 100644 --- a/src/en/articles/friends.md +++ b/src/en/articles/friends.md @@ -16,4 +16,4 @@ Here are good friends of MengGuyi [![废柴乙乙的Blog!](/assets/images/CH2COOC2H5.jpg "废柴乙乙的Blog!" =90x)](https://echiru.top/)[![不断同学](https://media.cdn.461blog.cn/wp-content/uploads/2021/02/136aacdf4466a5_1_avatar.jpeg "不断同学" =90x)](https://www.461blog.cn/) [![Dim Aurora](https://seccdn.libravatar.org/gravatarproxy/bc2b9b8ef2f566771bb757f97ab62707?s=128 "Dim Aurora" =90x)](https://www.dimaurora.com/)[![沐泽的树洞](https://avatars.githubusercontent.com/u/132760387?v=4 "沐泽的树洞" =90x)](https://zelihole.github.io/)[![楽之空](https://qilechan.dimaurora.com/images/IMG_0634.JPG "楽之空" =90x)](https://qilechan.dimaurora.com/)[![水星的个人主页](http://xn--kiv58k.cc/storage/avatar/b5/d87b56349695470f80a7ce4497b577.jpg "水星" =90x)](http://xn--kiv58k.cc)[![负4价的yOung元素的博客](https://blog-storage.young-4.com/profile.png "负4价的yOung元素" =90x)](https://blog.young-4.com)[![千羽茶会](https://qianyuchan.com/wp-content/uploads/2021/08/cropped-QQ%E5%9B%BE%E7%89%8720200822140003.png "千羽茶会" =90x)](https://qianyuchan.com/)[![绒绒洛](https://qwq.dog/pic/avatar.png "绒绒洛" =90x)](https://qwq.dog)[![IUU6's Blog](https://blog.rzly.net/images/avatar.png "IUU6's Blog" =90x)](https://blog.rzly.net) -If you want to apply for a friend link Just add the information of this site to your site first, and then tell me in the comment section. +If you want to apply for a friend link Just add the information of this site to your site first, and then send Email to i@mengguyi.com