Category Archives: Tools

WSL cause C1083

遇坑:
在 WSL 下用 git clone 的代码,可以在编辑器(Qt Creator)中正常打开;qmake 执行也正常,但是编译时报 c1xx : fatal error C1083。

解决:
发现是 WSL 的问题,在 Windows 下重新复制(或打包再解包)就 OK 了。

参考:
https://developercommunity.visualstudio.com/content/problem/240102/problem-with-compile-c-project-c1xx-fatal-error-c1.html

宽带升级到100M之后……

前两天电信客服来电说可以把家里的宽带免费升级到100M,在外面想用家里的设备测一下实际的上下行速度。家里 7×24 小时开机的设备有一台 Mikrotik RB751G-2HnD 和一台 Buffalo LS-WXL (重刷了 Debian Wheezy 7.9),那就看看SpeedTest有没有 Linux Console 版本的吧。

果然在GitHub 上找到一个:https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py
# wget https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py
# chmod +x speedtest_cli.py
# ./speedtest_cli.py

执行下,结果还不错
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from China Telecom (121.231.9.15)...
Selecting best server based on latency...
Hosted by CHINA UNICOM JIANGSU COMPANY (Nanjing) [117.84 km]: 7.761 ms
Testing download speed........................................
Download: 93.06 Mbit/s
Testing upload speed..................................................
Upload: 4.23 Mbit/s

Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from China Telecom (49.89.188.61)...
Selecting best server based on latency...
Hosted by China Telecom JiangSu Branch (Nanjing) [198.70 km]: 11.072 ms
Testing download speed........................................
Download: 102.80 Mbit/s
Testing upload speed..................................................
Upload: 3.79 Mbit/s

再测一下 BT 下载速度,NAS 上用 transmission 下Fedora-24-Server 的镜像,速度完全只能达到3~4MB/s,dstat 一看,CPU 竟然满载……

再看一下 ROS 的 CPU Usage 竟然也达到 60~70%

看来是时候考虑新一波的设备升级计划了~~~

基于GitLab的开发流程实施小结

最近协助一个开发团队实施了基于GitLab的开发流程,期间遇到的一些经验总结记录整理成本文。

该团队原先只有一个Subversion仓库,权限是按照目录分配的。同一个项目内的所有开发者都有提交权限,导致经常发生一些不该提交的文件被提交进仓库或者代码中包含了一些低级错误,等其他人发现为时已晚。因此迫切需要引入代码审查机制,第一时间对提交的代码进行审查,提高代码的质量。

组织架构及代码库规划

首先,为部门、项目组、个人分别建立账号;
其次,将原先单一的SVN仓库拆分成单独的Project。

组织架构及代码库示意如下:

repository-org

在GitLab上建立代码库

核心代码库是由原SVN库迁移导入,项目组将项目fork至项目组空间,开发人员从项目组fork至个人空间,在至此阶段GitLab上的仓库建立完毕。开发人员从本地通过git clone命令从将个人空间项目克隆至本地进行开发。流程示意如下:

workflow-1

本地开发仓库Pull与Push

注意:本地开发仓库的Pull与Push的远端URL是不同的。

更新本地仓库应从核心代码库拉取,因为核心代码库包括了其他开发者的工作成果;
提交应该至个人代码库,提交后在利用GitLab的Merge Request向上一级合并。

workflow-2

合并请求(Merge Request) & 代码审查(Code Review)

代码审查是在合并请求的过程中进行的,个人在GitLab中发起一个Merge Request,项目组会收到该请求,在GitLab界面上直接可以查看Commits和对比Changes,如果审查通过,Accept该请求,GitLab会自动Merge进项目组的代码库中;同理,项目组再向核心代码库发起Merge Request,由部门经过审查,则修改可以合并至核心代码库中。

workflow-3

以上是二级代码审查流程,其原理可以适用于更多层级的组织架构。

DevOps环境搭建指南

维基百科上关于DevOps的定义:

DevOps(英文Development和Operations的组合)代表一种文化、运动或实践。旨在促进软件交付和基础设施变更软件开发人员(Dev)和IT运维技术人员(Ops)之间的合作和沟通。它的目的是构建一种文化和环境使构建,测试,发布软件更加快捷,频繁和可靠。

DevOps环境是由多种工具或者工具链组成,一般按交付过程包含以下部分:

  • 编码:代码编写、审查、持续集成
  • 构建:版本控制、代码合并、构建状态
  • 测试:自动化测试及测试报告
  • 打包:二进制仓库、Docker镜像仓库
  • 发布:变更管理、自动发布
  • 配置:基础设施配置和管理
  • 监视:性能监视、用户行为反馈

下面列举我在日常工作中用到的工具、环境,具体的安装、配置方法请参考官方手册或借助搜索引擎。

RouterOS

RouterOS(简称ROS)是一个基于Linux的软路由系统,我一般使用ROS的以下功能:

  • VLAN——可以区分公司内部的开发、测试、办公网络,保证研发环境网络的可用性
  • L2TP/IPSEC VPN——每个人都可以随时接入公司网络,方便在外调试
  • DNS——将公司内部的服务都通过域名进行访问,无需记忆IP地址
  • DHCP——配合PXE网络安装环境使用

VMware ESXi

虚拟化利器,不多介绍。机器加足内存就好。

FreeNAS

可靠的存储是其它服务的基础,我个人倾向于使用独立的SAN/NAS设备而不是服务器的本地存储。

主要原因有以下两点:

  • ESXi只支持高端的硬件RAID卡,成本高
  • 需要一开始就规划好每台机器的需求,没法共享

利用FreeNAS可以提供iSCSI Target给ESXi使用,同时可以给每个人都提供独立的Samba空间——通过Windows共享访问。

选择FreeNAS还有一个重要的原因就是ZFS。

OpenLDAP

OpenLDAP用来存放组织结构树及相应的权限,GitLab、MediaWiki、FreeNAS都支持基于LDAP的用户认证。

GitLab

GitLab提供了Git仓库、Code Review(通过Merger Request实现)、Issue Tracker等功能。

我认为GitLab相比传统的Git Server、Visual SVN等工具,最为实用的一点就是每个人都有自己空间的管理权限。

比如很多尚未立项的小项目或个人项目,需要版本控制但是又无必要托管在部门的仓库上,有了GitLab便可以在自己的一亩三分地上随便玩了。

GitLab-CI

GitLab配套的持续集成工具,一般用来编译、构建和运行自动化测试。

简单、够用,yml语法也很简单。

Docker Registry

Docker镜像仓库,从GitLab-CI打包好的包会直接Push进入registry。

MediaWiki

GitLab针对每个项目都有wiki功能,但是我们需要一个独立于项目的知识库,因此选择了MediaWiki。

PXE/Mirrors

由于我的工作都是基于Linux的,经常要安装不同的发行版本,在公司内部部署一台PXE安装服务是非常必要的。

PXE环境一般由DHCP、TFTP和HTTP这三个服务组合实现的,DHCP由ROS提供。

ShadowSocks

针对特殊国情而配备,租用一个海外VPS,然后部署ShadowSocks,再部署Privoxy,将socks5转换为http代理。