自建Gitlab邮件发送服务器配置

自建了Gitlab服务器,为了使用邮件发送(密码找回、验证等等),可以直接使用腾讯企业邮箱或其他国内免费邮箱作为发送服务器,而不必架设Postfix等邮箱服务器。

以腾讯企业邮箱为例说明:

修改配置文件/etc/gitlab/gitlab.rb

gitlab_rails['gitlab_email_from'] = 'xxx@xxx.com.cn'
gitlab_rails['gitlab_email_reply_to'] = 'noreply@xxx.com.cn'

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "xxx@xxx.com.cn"
gitlab_rails['smtp_password'] = "xxxxxx"
gitlab_rails['smtp_domain'] = "exmail.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true

修改完成后,运行gitlab-ctl reconfigure,然后运行gitlab-rails console,进入控制台后运行以下命令测试设置是否正确和生效:

irb(main):003:0> Notify.test_email('xxx@xxx.com', 'Message Subject', 'Message Body').deliver_now

其中xxx@xxx.com为接收人的邮箱,如果该邮箱成功收到邮件则说明设置成功。

WordPress 4.9.x主题添加ICP备案号

添加位置

主题目录下template-parts/footer/site-info.php文件

例如:
/htdocs/wp-content/themes/twentyseventeen/template-parts/footer/site-info.php

添加内容

	<span>
	<a href="http://www.miitbeian.gov.cn/" rel="external nofollow" target="_blank"><?php echo get_option( 'zh_cn_l10n_icp_num' );?>
	</a>
	</span>

具体位置见以下完整代码:

<?php
/**
 * Displays footer site info
 *
 * @package WordPress
 * @subpackage Twenty_Seventeen
 * @since 1.0
 * @version 1.0
 */

?>
<div class="site-info">
	<?php
	if ( function_exists( 'the_privacy_policy_link' ) ) {
		the_privacy_policy_link( '', '<span role="separator" aria-hidden="true"></span>' );
	}
	?>
	<a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentyseventeen' ) ); ?>" class="imprint">
		<?php printf( __( 'Proudly powered by %s', 'twentyseventeen' ), 'WordPress' ); ?>
	</a>
	<span>
	<a href="http://www.miitbeian.gov.cn/" rel="external nofollow" target="_blank"><?php echo get_option( 'zh_cn_l10n_icp_num' );?>
	</a>
	</span>
</div><!-- .site-info -->

Ubuntu16.04 eGalaxTouch Calibration(校屏的方法)

在Ubuntu14.04中使用了官方的驱动,自带了校屏工具。系统升级到Ubuntu16.04后没有再使用官方驱动,内核中已经自带了驱动,工作良好。经过摸索,校屏方法同样很简单。

一条命令搞定,实时生效,不需要重启系统:

xinput_calibrator –output-filename /usr/share/X11/xorg.conf.d/99-calibration.conf

Calibre Windows下代理的设置

Calibre需要通过搜索引擎获取书籍的metadata,国内无法使用google,体验非常不好。同时shadowsocks没有http代理,所以需要借助于Privoxy实现http代理供Calibre使用。这里不讨论shadowsocks搭梯子的方法。

下载Privoxy

官网http://www.privoxy.org/无法打开,可以直接从sourceforge下载windows安装包:

https://sourceforge.net/projects/ijbswa/

配置Privoxy

修改config.txt,在文件末尾增加一行,内容如下:

forward-socks5 / 127.0.0.1:1080 .

注意:最后有一个点号,本地端口号1080是shadowsocks默认的,配置完成后启动Privoxy。

配置Windows环境变量

增加三个环境变量,如下:

http_proxy=http://127.0.0.1:8118
https_proxy=https://127.0.0.1:8118
no_proxy=.gitlab.com

备注:no_proxy的目的是为了避免影响其他程序的使用,忽略那些不需要从代理访问的站点

验证Calibre http代理设置是否生效

进入Calibre设置Preferences->Advanced->Miscellaneous中,检查是否已检测到http代理设置。

Ubuntu 16.04 cgit with apache2

Ubuntu 16.04环境下搭建Git服务器

(1)安装apache2

sudo apt-get install apache2

(2)安装cgit

git clone https://git.zx2c4.com/cgit
cd cgit
git submodule init
git submodule update
make
sudo make install

依赖项

sudo apt-get install build-essential
sudo apt-get install libssldev

(3)配置apache2

启用模块

sudo a2enmod cgid

添加/etc/apache2/conf-available/cgit.conf

ScriptAlias /cgit/ “/var/www/htdocs/cgit/cgit.cgi/”
RedirectMatch ^/cgit$ /cgit/
Alias /cgit-css “/var/www/htdocs/cgit/”
<Directory “/var/www/htdocs/cgit/”>
AllowOverride None
Options ExecCGI FollowSymlinks
Require all granted
</Directory>

启用cgit.conf

sudo ln -sf ../conf-available/cgit.conf cgit.conf

(4)配置cgit

/etc/cgitrc

#
# cgit config
# see cgitrc(5) for details

css=/cgit-css/cgit.css
logo=/cgit-css/cgit.png

repo.url=test.git
repo.path=/var/www/htdocs/cgit/test.git
repo.desc=the master test repository
repo.owner=test@example.com
repo.readme=info/web/about.html

 

[转载教程] 免 SHSH 从 iOS 9.0 ~ 9.3.5 降级到 iOS 8.4.1

【原文链接】

http://bbs.feng.com/forum.php?mod=viewthread&tid=11373525&extra=page%3D&fid=333&page=1

【转载说明】

感谢作者的分享,此方法经站长测试,ipad mini 1代有效,成功从9.3.5降级至8.4.1。

【友情提请】

Win10下运行Impactor不要使用管理员权限运行,否则无法使用文件拖动功能。

【教程】

如果你的 iPod touch (第五代)、iPad 2 (包含 2012 年的 32 纳米处理器制程改款)、iPad (第三代)、iPad (第四代)、iPad mini (第一代)、iPhone 4s 或 iPhone 5 正在运行 iOS 9.0 至 9.3.5 之间的任意一个 iOS 版本,你可以在无需备份固件签署证书的情况下降级到 iOS 8.4.1,但不能降级到 iOS 7。这个教程不支持 iPhone 5c。
由于目前没有兼容 iOS 10.3.3 的越狱工具,这一回答暂时不适用于 iOS 10.3.3 的 iOS 设备。当兼容 iOS 10.3.3 的越狱工具推出后,这一回答将同样适用于 iOS 10.3.3。

第一步:越狱你的 iOS 设备
– 如果你在运行 iOS 9.3.5,通过电脑前往 https://phoenixpwn.com 下载 PHŒNIX 越狱工具。如果你在运行 iOS 9.0 至 iOS 9.3.4,通过电脑前往 http://wall.supplies/ 下载 Home Depot 越狱工具。前往 http://www.cydiaimpactor.com/ 下载 Impactor。
– 将设备连接到电脑,在电脑打开 Impactor,并将下载到的越狱程序 IPA 安装包拖动到 Impactor 的窗口里。
– Impactor 会提示输入一组 Apple ID 和密码。输入你的 Apple ID 和密码。
– Home Depot 会被安装在你的 iOS 设备上。打开 Home Depot,并选择越狱。
– 越狱成功后,你的 iOS 设备会显示白色的 Apple 标识并重新启动主屏幕进程。

第二步:重新配置系统版本描述以欺骗软件更新机制
– 打开 Cydia 后,搜索并安装 Filza。
– 打开 Filza app,前往 /System/Library/CoreServices。打开 SystemVersion.plist。
– 修改 ProductVersion 的对应键值为 6.1.3,ProductBuildVersion 的对应键值为 10B329。
– 再三仔细检查所做的修改没有错误,随后保存所做的修改。如果在修改错误的情况下继续执行第三步,你可能失去降级的机会,并会被迫更新到 iOS 10。

第三步:解除越狱
– 前往设置 → 通用 → 还原 → 抹掉所有内容和设置,从而解除越狱。
– 完成设备重置后的设置流程并激活你的 iOS 设备。

第四步:下载并安装 iOS 8.4.1
– 打开设置 → 通用 → 软件更新。iOS 设备会检测到 iOS 8.4.1 软件更新。
– 轻按“更新”。iOS 设备会请求更新,请求更新的过程可能需要几分钟。请求完成后,下载更新可能需要几十分钟或几个小时。
– 下载完成后,同意许可协议并选择 “现在安装更新”。
– iOS 设备会显示一个 Apple 标识和进度条,并降级到 iOS 8.4.1。
– 当白色的进度条即将填满灰色的轨道时,白色的进度条可能会短暂冻结,设备温度也可能升高。这是正常的现象,请耐心等待并不要重启或强行断电。尽管 iOS 8.4.1 安装包的数据迁移脚本没有针对 iOS 9 的用户数据分区进行适配,只要耐心等待几分钟后,设备会自动跳过迁移脚本。
– iOS 设备已被成功降级并会重新启动,再次显示进度条。这是正常的现象。
– 完成设备降级后的设置流程并激活你的 iOS 设备。

第五步:清空用户数据分区以提升稳定性
– 此时,iOS 设备会启动到 iOS 8.4.1 并显示 iOS 8 的主屏幕。由于 iOS 8 的迁移脚本不能完全正确迁移 iOS 9 的数据分区,一部分内置 app、系统进程可能不稳定或出错。为了解决这一问题,再次前往设置 → 通用 → 还原 → 抹掉所有内容和设置。这一操作会抹掉包含来自 iOS 9 的、未经正确迁移的数据分区。
– 完成设备重置后的设置流程并激活你的 iOS 设备。

此时,你的 iOS 设备已成功降级至 iOS 8。你可以安装 tvOS 测试版系统的描述文件,从而禁用软件更新机制,防止设置 app 上方出现角标。

ubuntu设置Wifi链接为默认链接

运行环境:Ubuntu 16.04

网络管理:NetworkManager

网络:eth0 —> 局域网,Wifi —> 外网

默认情况下,eth0为默认路由,需要将wifi设置为默认路由,使用NetworkManager最简单的修改方法如下:

打开网络管理器,在eth0路由设置里将”Use this connection only for resources on its network”勾选中,IPv4和IPv6均设置。

【转载】VisualSVN Server 增加自助修改密码页面(支持2.1-3.6最新版)

==============================================================

原文链接:http://oicu.cc.blog.163.com/blog/static/1230394712016102312546504/

请访问原文链接以获取最新版本,感谢原文作者的无私共享,本站仅转载作为镜像保存!

==============================================================

注:本方法实测支持 VisualSVN 2.1~3.6.x,不过2还需多改Apache的配置,老版本应该抛弃,懒得写了。
转载请注明来源,不为别的,就是怕那些无良网站为了流量到处转帖,转丢失内容或者是老版本的内容。
如果不用VisualSVN客户端的话,VisualSVN Server只能在服务器端修改密码,对管理来说很不方便。
 
网上大部分给 VisualSVN 增加自助修改密码的补丁都是基于 2.5.x 版本的,也有几个用于 3.5.x/3.6.x 版本,多数还是用 cgi 方式,而且要么像 csdn 那样藏着掖着,要么也没个详细的说明。
 
VisualSVN Server 帐号及密码保存在 htpasswd 文件里,除了 cgi 有以下几种修改方式:
 
1、使用 VisualSVN Server Manager 管理工具重置密码。
 
2、通过 WMI 里用 PowerShell 脚本更改。示例如下:
$svnuser = Get-WmiObject -Namespace Root\VisualSVN `
-ComputerName svn.hostname.com `
-query “select * from VisualSVN_User where name = ‘username'”
$svnuser.SetPassword(‘123456’)
3、使用 Windows 版 Apache 的 htpasswd.exe 命令更改。
该方法是使用 php 页面来调用 htpasswd.exe 修改密码,方便用户通过网页修改,下面讲解配置要点。

 

我使用的操作系统是 Windows Server 2008R2 x64,安装了 VisualSVN Server 3.5.6 x64 带 Apache 2.2.31 x64 的版本,默认安装路径。
 
从 Apache 官方网站下载完整的 Apache 2.2.31 x64 版本,从里面提取一个文件 htpasswd.exe 放到
C:\Program Files\VisualSVN Server\bin\htpasswd.exe
Apache 2.2.x 要以 handler 方式加载 php 模块,只有 php 5.2-5.4 的 Thread Safe 版本才带 php5apache2_2.dll 文件,php 5.5 及之后的版本只能和 Apache 2.4.x 搭配了,所以选定 php 5.4 版本。
 
特别注意,如果用 VisualSVN Server x64 就必须找 x64 的 php!
否则 Apache 加载 php 模块会提示错误 Cannot load php5apache2_2.dll into server
因为 Apache x64 无法使用 php x86。
 
使用 32 位版本的 VisualSVN Server 比较简单,因为 php 官网都是 x86 版本:
 
使用 64 位版本的 VisualSVN Server 就得找第三方编译的 php x64 版本了,提供两个下载:
 
我下载的是 php-5.4.36-Win32-VC9-x64.zip,下载后解压到 C:\Program Files\VisualSVN Server\php 文件夹。把 php.ini-production 文件重命名为 php.ini 即可,其他不用配置。
 
修改空文件 C:\Program Files\VisualSVN Server\conf\httpd-custom.conf
内容如下:
LoadModule php5_module “php/php5apache2_2.dll”
<IfModule php5_module>
AddType application/x-httpd-php .php
DirectoryIndex index.html index.php
</IfModule>
# 配置 php.ini 的路径
PHPIniDir “php”
新建一个 php 文件放到 C:\Program Files\VisualSVN Server\htdocs\pw\index.php
内容如下(做了一点小修改,增加返回及跳转页面的处理):
<?php
$username = $_SERVER[“PHP_AUTH_USER”]; //经过 AuthType Basic 认证的用户名
$authed_pass = $_SERVER[“PHP_AUTH_PW”]; //经过 AuthType Basic 认证的密码
$input_oldpass = (isset($_REQUEST[“oldpass”]) ? $_REQUEST[“oldpass”] : “”); //从界面上输入的原密码
$newpass = (isset($_REQUEST[“newpass”]) ? $_REQUEST[“newpass”] : “”); //界面上输入的新密码
$repeatpass = (isset($_REQUEST[“repeatpass”]) ? $_REQUEST[“repeatpass”] : “”); //界面上输入的重复密码
$action = (isset($_REQUEST[“action”]) ? $_REQUEST[“action”] : “”); //以hide方式提交到服务器的action
if ($action!=”modify”) {
$action = “view”;
} else if ($authed_pass!=$input_oldpass) {
$action = “oldpasswrong”;
} else if (empty($newpass)) {
$action = “passempty”;
} else if ($newpass!=$repeatpass) {
$action = “passnotsame”;
} else{
$action = “modify”;
}
?>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=GBK”>
<title>Subversion 在线自助密码修改</title>
</head>
<body>

<?php
//action=view 显示普通的输入信息
if ($action == “view”) {
?>
<script language = “javaScript”>
<!–
function loginIn(myform) {
var newpass=myform.newpass.value;
var repeatpass=myform.repeatpass.value;

    if (newpass==””) {
alert(“请输入密码!”);
return false;
}

    if (repeatpass==””) {
alert(“请重复输入密码!”);
return false;
}

    if (newpass!=repeatpass) {
alert(“两次输入密码不一致,请重新输入!”);
return false;
}
return true;
}
//–>
</script>

<style type=”text/css”>
<!–
table {
border: 1px solid #CCCCCC;
background-color: #f9f9f9;
text-align: center;
vertical-align: middle;
font-size: 9pt;
line-height: 15px;
}
th {
font-weight: bold;
line-height: 20px;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-bottom-style: solid;
color: #333333;
background-color: f6f6f6;
}
input{
height: 18px;
}
.button {
height: 20px;
}
–>
</style>

<br><br><br>
<form method=”post”>
<input type=”hidden” name=”action” value=”modify”/>
<table width=”220″ cellpadding=”3″ cellspacing=”8″ align=”center”>
<tr>
<th colspan=2>Subversion 密码修改</th>
</tr>
<tr>
<td>用 户 名:</td>
<td align=”left”> <?php echo $username?></td>
</tr>
<tr>
<td>原 密 码:</td>
<td><input type=password size=12 name=oldpass></td>
</tr>
<tr>
<td>用户密码:</td>
<td><input type=password size=12 name=newpass></td>
</tr>
<tr>
<td>确认密码:</td>
<td><input type=password size=12 name=repeatpass></td>
</tr>
<tr>
<td colspan=2>
<input onclick=”return loginIn(this.form)” class=”button” type=submit value=”修 改”>
<input name=”reset” type=reset class=”button” value=”取 消”>
<input onclick=”window.location.href=’/'” class=”button” type=”button” value=”返 回”>
</td>
</tr>
</table>
</form>
<?php
} else if ($action == “oldpasswrong”) {
$msg=”原密码错误”;
} else if ($action == “passempty”) {
$msg=”请输入新密码”;
} else if ($action == “passnotsame”) {
$msg=”两次输入密码不一致,请重新输入”;
} else {
$passwdfile=”
D:\Repositories\htpasswd“;
$command='”
C:\Program Files\VisualSVN Server\bin\htpasswd.exe” -b ‘.$passwdfile.” “.$username.’ “‘.$newpass.'”‘;
system($command, $result);
if ($result==0) {
$msg_succ=”用户[“.$username.”]密码修改成功,请用新密码登陆”;
} else {
$msg=”用户[“.$username.”]密码修改失败,返回值为”.$result.”,请和管理员联系”;
}
}

if (isset($msg_succ)) {
?>
<script language=”javaScript”>
<!–
alert(“<?php echo $msg_succ?>”);
window.location.href=”/”
//–>
</script>
<?php
} else if (isset($msg)) {
?>
<script language=”javaScript”>
<!–
alert(“<?php echo $msg?>”);
window.location.href=”<?php echo $_SERVER[“PHP_SELF”]?>”
//–>
</script>
<?php
}
?>
</body>
</html>

 
在header增加超链接麻烦,所以我就在页脚增加修改密码的链接,
修改文件 C:\Program Files\VisualSVN Server\WebUI\index.html
内容如下:
<footer>
Powered by <a href=”
http://www.visualsvn.com/server/”>VisualSVN Server</a>. &copy; 2005-2016 VisualSVN Limited.
<br /><br /><a href=”/pw”>自助修改密码</a>
</footer>
完工。

 

效果图如下:

VisualSVN Server 3.5.x增加自助修改密码页面 - oicu - Oh! I see you!

 

VisualSVN Server 3.5.x增加自助修改密码页面 - oicu - Oh! I see you!
==============================================================
本站说明:如果启动http服务报错,则需要安装VC9.0的运行库
==============================================================