当前位置: 首页 > 编程日记 > 正文

gitlab搭建

一、安装源和依赖包

#增epel源,如果你是i686系统,请把x86_64修改下。
cd /usr/local/src
wget -O /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 https://www.fedoraproject.org/static/0608B895.txt
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

#确认是否安装成功
rpm -qa gpg*
gpg-pubkey-0608b895-4bd22942

#增puias源
wget -O /etc/yum.repos.d/PUIAS_6_computational.repo https://gitlab.com/gitlab-org/gitlab-recipes/raw/master/install/centos/PUIAS_6_computational.repo

注:如果此处是404,可手动创建 PUIAS_6_computational.repo 源 [PUIAS_6_computational] name=PUIAS computational Base $releasever - $basearch mirrorlist=http://puias.math.ias.edu/data/puias/computational/$releasever/$basearch/mirrorlist #baseurl=http://puias.math.ias.edu/data/puias/computational/$releasever/$basearch gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-puiaswget -O /etc/pki/rpm-gpg/RPM-GPG-KEY-puias http://springdale.math.ias.edu/data/puias/6/x86_64/os/RPM-GPG-KEY-puias rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-puias

#验证是否成功
rpm -qa gpg*
gpg-pubkey-41a40948-4ce19266

#查看仓库源
yum repolist
#如果此列表中没有epel和PUIAS_6_computational,请执行以下命令:
yum-config-manager --enable epel --enable PUIAS_6_computational

 二、安装依赖包

yum -y update
yum -y groupinstall 'Development Tools'
yum -y install readline readline-devel ncurses-devel gdbm-devel glibc-devel tcl-devel openssl-devel curl-devel expat-devel db4-devel byacc sqlite-devel libyaml libyaml-devel libffi libffi-devel libxml2 libxml2-devel libxslt libxslt-devel libicu libicu-devel system-config-firewall-tui redis sudo wget crontabs logwatch logrotate perl-Time-HiRes git cmake libcom_err-devel.i686 libcom_err-devel.x86_64

三、安装git
 #默认centos的git版本是1.7.10,所以要先删除,然后再下载源码安装
yum remove git -yyum install zlib-devel perl-CPAN gettext curl-devel expat-devel gettext-devel openssl-develmkdir /tmp/git && cd /tmp/gitcurl --progress https://www.kernel.org/pub/software/scm/git/git-2.1.3.tar.gz | tar xz
 
cd  git-2.1.3/ && ./configure && make && make prefix=/usr/local install

#完成后验证
which git/usr/local/bin/gitgit --versiongit version 2.1.3

四、安装ruby

#ruby版本需要2.0+,所以先卸载系统已存在的

yum remove ruby

#如果是源码安装的

cd (your-ruby-source-path) && make uninstall

#安装

mkdir /tmp/ruby && cd /tmp/rubycurl --progress ang.org/pub/ruby/2.1/ruby-2.1.2.tar.gz | tar xzcd ruby-2.1.2 && ./configure --disable-install-rdoc && make && make prefix=/usr/local install

#安装bundler

gem install bundler --no-doc

#完成后验证

which ruby/usr/local/bin/rubyruby -vruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]

五、创建系统用户

adduser --system --shell /bin/bash --comment 'GitLab' --create-ome --home-dir /home/git/ git增加/usr/local/binvisudo#修改以下内容Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

六、安装mysql

#mysql的版本至少5.5.14或更新

[root@www ~]# /usr/local/mysql/bin/mysql --version/usr/local/mysql/bin/mysql  Ver 14.14 Distrib 5.6.31, for Linux (x86_64) using  EditLine wrapper

安装方法略过

##创建数据库用户并授权

mysql -u root -pmysql> CREATE USER 'git'@'localhost' IDENTIFIED BY 'gitpwd';mysql> show variables like "%engine";
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| default_storage_engine | InnoDB |
| storage_engine         | InnoDB |
+------------------------+--------+
2 rows in set (0.01 sec)#如果不是InnoDB引擎,需执行下面命令
mysql> SET storage_engine=INNODB;#创建数据库
CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;#给用户授权GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'git'@'localhost';#测试是否能够成功登录mysql -ugit -pgitpwd -D gitlabhq_production

七、配置redis

chkconfig redis oncp /etc/redis.conf /etc/redis.conf.orig#修改监听端口(此步骤可忽略)
sed 's/^port .*/port 0/' /etc/redis.conf.orig |tee /etc/redis.conf#增加内容
echo 'unixsocket /var/run/redis/redis.sock' |tee -a /etc/redis.confecho -e 'unixsocketperm 0770' |tee -a /etc/redis.conf#创建目录改权限mkdir /var/run/redischown redis:redis /var/run/redischmod 755 /var/run/redis#启动服务
service redis restart#附加git到redis组
usermod -aG redis git

八、安装gitlab
cd /home/git#下载源码
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 7-4-stable gitlab
#修改配置
cd gitLab/sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml
sudo -u git -H vim config/gitlab.yml
gitlab:## Web server settings (note: host is the FQDN, do not include http://)
    host: localhostport: 80https: false#修改目录权限
chown -R git log/
chown -R git tmp/
chmod -R u+rwX log/
chmod -R u+rwX tmp/
chmod -R u+rwX tmp/pids/
chmod -R u+rwX tmp/sockets/
chmod -R u+rwX  public/uploads#创建目录sudo -u git -H mkdir /home/git/gitlab-satellites
chmod u+rwx,g=rx,o-rwx /home/git/gitlab-satellites#编辑配置文件unicorn.rb
sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb#查看系统核心数
nproc
1#编辑配置
sudo -u git -H vim config/unicorn.rb
worker_processes 1#拷贝配置文件rack_attack.rb
sudo -u git -H cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb#定义全局的用户和邮箱
sudo -u git -H git config --global user.name "GitLab"
sudo -u git -H git config --global user.email "example@example.com"
sudo -u git -H git config --global core.autocrlf input#编辑连接redis配置
#拷贝配置
sudo -u git -H cp config/resque.yml.example config/resque.yml#连接redis配置,默认配置,未修改
sudo -u git -H vim config/resque.yml九、配置gitlab数据库文件sudo -u git cp config/database.yml.mysql config/database.yml#编辑配置文件
sudo -u git -H vim config/database.yml
production:adapter: mysql2encoding: utf8collation: utf8_general_cireconnect: falsedatabase: gitlabhq_productionpool: 10username: gitpassword: "gitpwd"host: localhostsocket: /var/lib/mysql/mysql.sock#修改文件权限,只有git用户可读
sudo -u git -H chmod o-rwx config/database.yml十、安装gemcd /home/git/gitLabsudo -u git -H bundle install --deployment --without development test postgres aws

十一、安装gitlab-shell
官网上给的gitlab-shell版本是2.1.0,后面会有问题(本地到远程不能连接),网上查找问题是版本问题,需要gitlab-shell的版本是2.0.1
sudo -u git -H bundle exec rake gitlab:shell:install[v2.0.1] REDIS_URL=unix:/var/run/redis/redis.sock RAILS_ENV=production#编辑配置
sudo -u git -H vim /home/git/gitlab-shell/config.yml
---
user: git
gitlab_url: https://localhost/
http_settings:self_signed_cert: true
repos_path: "/home/git/repositories/"
auth_file: "/home/git/.ssh/authorized_keys"
redis:bin: "/usr/bin/redis-cli"namespace: resque:gitlabsocket: "/var/run/redis/redis.sock"
log_level: INFO
audit_usernames: false

十二、初始化数据库
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production#可以设置管理员密码(此步骤可省略。。。)
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production GITLAB_ROOT_PASSWORD=newpassword十三、下载服务脚本wget -O /etc/init.d/gitlab  https://gitlab.com/gitlab-org/gitlab-recipes/raw/master/init/sysvinit/centos/gitlab-unicornchmod +x /etc/init.d/gitlabchkconfig --add gitlabchkconfig gitlab on#设置logrotate
cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab#检测应用状态
sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=productionsudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production#启动服务
service gitlab start

十四、配置web服务
yum -y install nginx
chkconfig nginx on
mkdir /etc/nginx/sites-available
mkdir /etc/nginx/sites-enabled
wget -O /etc/nginx/sites-available/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/master/web-server/nginx/gitlab-ssl
ln -sf /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab编辑/etc/nginx/nginx.conf,将 include /etc/nginx/conf.d/*.conf; 替换成 include /etc/nginx/sites-enabled/*;,就是修改额外加载的配置文件目录。编辑/etc/nginx/sites-available/gitlab,将配置中server_name替换成实际访问的域名。#将nginx加入git用户组
usermod -a -G git nginx
chmod g+rx /home/git/#添加ssl证书或者自己生成一个cd /etc/nginx && openssl req -new -x509 -nodes -days 3560 -out gitlab.crt -keyout gitlab.key#启动nginx
service nginx start

#登陆

用户名/密码root/5iveL!fehttps://192.168.16.111/users/sign_in 

nginx基于http的配置()

[root@node4 gitlab]$ sudo wget https://raw.github.com/gitlabhq/gitlab-recipes/master/init/sysvinit/centos/gitlab-unicorn -P /etc/init.d/
gitlab 内容
#!/bin/bash

# Include RedHat function library
. /etc/rc.d/init.d/functions# The name of the service
NAME=${0##*/}### Environment variables
RAILS_ENV="production"# The username and path to the gitlab source
USER=git
APP_PATH=/home/$USER/gitlab# The PID and LOCK files used by unicorn and sidekiq
UPID=$APP_PATH/tmp/pids/unicorn.pid
ULOCK=/var/lock/subsys/unicorn
SPID=$APP_PATH/tmp/pids/sidekiq.pid
SLOCK=/var/lock/subsys/sidekiq# Evaluate the real path for the user (should already have RVM)
PATH_PATCH="PATH=$(su $USER -s /bin/bash -l -c "echo \"\$PATH\"") && export PATH && "

start() {
cd $APP_PATH# Start unicorn
echo -n $"Starting unicorn: "
daemon --pidfile=$UPID --user=$USER "$PATH_PATCH RAILS_ENV=$RAILS_ENV bin/web start"
unicorn=$?
[ $unicorn -eq 0 ] && touch $ULOCK
echo# Start sidekiq
echo -n $"Starting sidekiq: "
daemon --pidfile=$SPID --user=$USER "$PATH_PATCH RAILS_ENV=$RAILS_ENV bin/background_jobs start"
sidekiq=$?
[ $sidekiq -eq 0 ] && touch $SLOCK
echoretval=$unicorn || $sidekiq
return $retval
}stop() {
cd $APP_PATH# Stop unicorn
echo -n $"Stopping unicorn: "
killproc -p $UPID
unicorn=$?
[ $unicorn -eq 0 ] && rm -f $ULOCK
echo# Stop sidekiq
echo -n $"Stopping sidekiq: "
killproc -p $SPID
sidekiq=$?
[ $sidekiq -eq 0 ] && rm -f $SLOCK
echoretval=$unicorn || $sidekiq
return $retval
}restart() {
stop
start
}get_status() {
status -p $UPID unicorn
unicorn=$?status -p $SPID sidekiq
sidekiq=$?retval=$unicorn || $sidekiq
return $retval
}query_status() {
get_status >/dev/null 2>&1
return $?
}case "$1" in
start)
query_status && exit 0
start || exit 1
;;
stop)
query_status || exit 0
stop || exit 1
;;
restart)
restart || exit 1
;;
status)
get_status
exit $?
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|status}" >&2
exit 1
;;
esacexit 0
[root@node4 gitlab]$ sudo mv /etc/init.d/gitlab-unicorn /etc/init.d/gitlab
[root@node4 gitlab]$ sudo chmod +x /etc/init.d/gitlab
[root@node4 gitlab]$ sudo chkconfig --add gitlab
[root@node4 gitlab]$ sudo chkconfig gitlab on
[root@node4 gitlab]$ sudo /etc/init.d/gitlab start[root@node4 gitlab]$ cp lib/support/nginx/gitlab /usr/local/nginx/conf/conf.d/
[root@node4 gitlab]$ cd /usr/local/nginx/conf/conf.d/
[root@node4 gitlab]$ sudo chown -R git:git .
[root@node4 conf.d]$ cp gitlab gitlab.conf
[root@node4 conf.d]$ vi gitlab.conf
upstream gitlab {server unix:/home/git/gitlab/tmp/sockets/gitlab.socket;
}
server {listen 80 default_server;         # e.g., listen 192.168.1.1:80; In most cases *:80 is a good ideaserver_name your domain;     # e.g., server_name source.example.com;server_tokens off;     # don't show the version number, a security best practiceroot /home/git/gitlab/public;client_max_body_size 5m;access_log  logs/gitlab_access.log;error_log   logs/gitlab_error.log;location / {try_files $uri $uri/index.html $uri.html @gitlab;}location @gitlab {proxy_read_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694proxy_connect_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694
    proxy_redirect     off;proxy_set_header   X-Forwarded-Proto $scheme;proxy_set_header   Host              $http_host;proxy_set_header   X-Real-IP         $remote_addr;proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;proxy_pass http://gitlab;
  }
}
[root@node4 conf.d]$ sudo service nginx restart
[root@node4 conf.d]$ cd /home/git/gitlab
[root@node4 gitlab]$ bundle exec rake assets:precompile RAILS_ENV=production
[root@node4 gitlab]$ sudo service gitlab restart

遇到的问题:

启动后打开页面显示 502 错误:

解决方法:看日志

2016/10/28 11:50:46 [crit] 15189#0: *6 connect() to unix:/home/git/gitlab/tmp/sockets/gitlab-workhorse.socket failed (2: No such file or directory) while con
necting to upstream, client: 192.168.16.231, server: 192.168.16.111, request: "GET /static.css HTTP/1.1", upstream: "http://unix:/home/git/gitlab/tmp/sockets
/gitlab-workhorse.socket:/static.css", host: "192.168.16.111", referrer: "https://192.168.16.111/users/sign_in"

此时需要修改 nginx 里 gitlab.socketde 路径

nginx.conf 配置文件

图中红框内的socket文件改成  /home/git/gitlab/tmp/sockets 路径下存在的socket文件

转载于:https://www.cnblogs.com/FRESHMANS/p/6008843.html

相关文章:

kafka源码分析(二)Metadata的数据结构与读取、更新策略

一、基本思路 异步发送的基本思路就是:send的时候,KafkaProducer把消息放到本地的消息队列RecordAccumulator,然后一个后台线程Sender不断循环,把消息发给Kafka集群。 要实现这个,还得有一个前提条件:就是K…

python实现简单的http服务器_Python实现简单HTTP服务器(二)

#coding:utf-8importsocketimportreimportsysfrom multiprocessing importProcessclassHTTPServer(object):def __init__(self, application):"""application:指的是框架的app"""self.server_socketsocket.socket(socket.AF_INET, so…

机器学习中的模型评价、模型选择及算法选择

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 正确使用模型评估、模型选择和算法选择技术无论是对机器学习学术研究还是工业场景应用都至关重要。本文将对这三个任务的相关技术进行回顾&#xff…

Apache 流框架 Flink,Spark Streaming,Storm对比分析(一)

https://bigdata.163.com/product/article/5 Apache 流框架 Flink,Spark Streaming,Storm对比分析(一)转载于:https://www.cnblogs.com/WCFGROUP/p/9075745.html

梯度下降算法_神经网络梯度下降算法

神经网络梯度下降算法2018, SEPT 13梯度下降(Gradient Descent) 是神经网络比较重要的部分,因为我们通常利用梯度来利用Cost function(成本函数) 进行backpropagation(反向传播) 不断地iteration&#xff0…

微擎删除分类无法删除解决-select in效率低解决办法

今天朋友微擎后台微网站里的分类要删除,可是怎么删除也不能删除,同样的系统另一套却可以迅速删除。 后来查询到是查询语句的问题,朋友的平台用户量太大,数据太大,用了以下语句,造成效率太低: SE…

EOS技术及生态系统介绍

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 嘉宾介绍 哈胜,现任梦起文化传播有限公司技术总监,西北地区区块链技术发起第一人;一直在致力于将区块链技术推广…

svn 提交信息模板

版本:1.0作者:张三描述:修改了xxx转载于:https://www.cnblogs.com/ithfm/p/9075748.html

pta函数统计素数并求和_黎曼的zeta函数

9月24日阿提亚爵士(Sir Atiyah)直播“证明”黎曼猜想(Riemann hypothesis)在普通人中引发了一轮数学热潮,网络上一时间涌现了很多数学八卦文章。许多人在论及该命题重要性时都指出,ζ函数的非平凡零点与素数…

EasyRTMP手机直播推送rtmp流flash无法正常播放问题

本文转自EasyDarwin团队Kim的博客:http://blog.csdn.net/jinlong0603/article/details/52960750 问题简介 EasyRTMP是EasyDarwin团队开发的一套简单易用的RTMP推送SDK。本文想讲述下开发过程中遇到的一个问题。问题的现象是使用EasyRTMP推送音视频流到自己搭建的ngi…

对称加密和非对称加密

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 对称加密 对称密钥是双方使用相同的密钥 。 对称加密的要求 (1)需要强大的加密算法。算法至少应该满足:即使…

防火墙iptables介绍

防火墙: netfilter/iptables是集成在Linux2.4.X版本内核中的包过滤防火墙系统。该架构可以实现数据包过滤,网络地址转换以及数据包管理功能。linux中防火墙分为两部分:netfilter和iptables。netfilter位于内核空间,目前是Linux内核…

企业局域网的组建

写在前面的话 随着计算机技术发展啊,办公无纸化、网络化已经成为一种趋势。 企业局域网的概述 企业中可能有多台计算机,同时还可能有其他的硬件设备,比如打印机、扫描仪和数码相机等。通过组建小型网络,可以共享企业内部各种软、硬…

python3 线程池源码解析_5分钟看懂系列:Python 线程池原理及实现

概述传统多线程方案会使用“即时创建, 即时销毁”的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数极其频繁,那么服务器将处于不停的创建线程&#xff…

区块链+能源,能擦出什么样的火花?

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链从闯入能源行业的那一天起,就引起了行业内外人群的高度关注,关于能源区块链的争论与质疑不断搅动人们的神经。区块链能…

JS学习梳理(三)类型和语法

类型 JavaScript 有七种内置类型:null、undefined、boolean、number、string、object 和symbol,可以使用typeof 运算符来查看typeof返回的都是字符串很多开发人员将undefined 和undeclared 混为一谈, 但在JavaScript 中它们是两码事。undefin…

北师大历史系65 级同学聚会宁夏【之七】——在中阿之轴、西夏王陵、董府、板桥道堂、鸿乐府及告别宴会...

北师大历史系65级同学在中阿之轴 庞心田、王庆云、李建宇、樊淑爱、何明书、郑文范、李建宇夫人、惠晓秋、边聪民、登高夫人、张登高、杨家兴、杨森翔 西夏王陵 北师大历史系65级同学在西夏王陵 北师大历史系65级同学在西夏王陵 郑文范、王庆云在沙湖 北师大历史系65级同学在董…

会声会影水墨遮罩如何变大_自媒体长期网赚项目: 自媒体如何打造自己的自媒体知识付费课程(干货)...

小编简介:猫哥,自媒体人,9年互联网营销实战经验,乐于为大家分享实战经验,希望认识更多志同道合的朋友。面对现在知识付费的时代,知识就是财富,能把自己储存的知识转化为财富的人并不多&#xff…

OBS源代码阅读笔记

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 obs配置文件加载:bool OBSBasic::InitBasicConfig(); OBS认证信息加载,貌似还没有实现吗? void Auth::Load(){ …

存储器结构层次(二)

局部性: 局部性分为时间局部性和空间局部性:Locality is typically described as having two distinct forms: temporal locality and spatial locality. In a program with good temporal locality, a memory location that is referenced once is like…

python 核心编程 第十三章

python面对对象 类和实例:类是对象的定义,实例是真真的实物。 创建一个类: class AddrBookEnttry(object):def __init__(self, nm, ph):self.name nmself.phone phprint"Created instance for:", self.namedef updatePhone(self,…

python写一个文件下载器_Python3使用TCP编写一个简易的文件下载器

原标题:Python3使用TCP编写一个简易的文件下载器利用Python3来实现TCP协议,和UDP类似。UDP应用于及时通信,而TCP协议用来传送文件、命令等操作,因为这些数据不允许丢失,否则会造成文件错误或命令混乱。下面代码就是模拟…

提取Jar2Exe源代码,JavaAgent监控法

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 最近遇见一个麻烦,明明知道是java写的小软件,但是打包成了exe,木得办法,之前打包的都有缓存能在TEMP…

并发编程之多进程

一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程。Python提供了multiprocessing。 multiprocessing模块用来开启子进…

x9此计算机上没有hasp_mastercam x9安装步骤

大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。mastercam x9安装步骤是:1、首先,先下载好mastercam软件,下载安装包的大小为3.01G,双击打开setup.exe安装文件,然后再安装…

bitcoinj开发环境搭建

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 bitcoinj开发包是一个Java版本的比特币协议实现,使用bitcoinj就可以实现钱包管理和交易的发送与接收,而无须本地安装bitcoin…

static关键字用法

static关键字 1.修饰成员变量 在我们平时的使用当中,static最常用的功能就是修饰类的属性和方法,让他们成为类的成员属性和方法,我们通常将用static修饰的成员称为类成员或者静态成员,这句话挺起来都点奇怪,其实这是相…

swift x输入流_SwiftUI 探索 - 状态和数据流

SwiftUI是iOS13新出的声明式UI框架,将会完全改变以前命令式操作UI的开发方式。此文章主要介绍SwiftUI中状态管理的方式。可变状态State与React和Flutter中的State类似,只不过React和Flutter中需要显式调用setState方法。在SwiftUI 中直接修改State属性值…

qt 控件 背景色 透明 除去边框

在调试ui的时候,需要将背景色变为透明,与母控件的颜色一致,并且除去边框。 参考链接: http://www.qtcentre.org/threads/12148-how-QTextEdit-transparent-to-his-parent-window 除去背景色,使透明。ui->textBrowse…

A Strange Bitcoin Transaction

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 在之前的谈谈比特币的地址安全问题这篇文章中,我们谈到一个名为”LBC”的项目,这个项目通过暴力碰撞企图打捞到一些什么东西…