配合Clion在Ubuntu上安装并使用OpenMPI

如果你在虚拟机上安装Ubuntu,请确认系统的CPU拥有多个核心,比如下图的4核心

首先,我们在Ubuntu上安装OpenMPI

安装完成后,我们到Clion新建一个项目。打开项目的CMakeLists.txt,在任意set下加入下面的参数。

然后,我们打开菜单Run->Edit Configurations

找到当前应用的配置文件(默认应该就是),比如我这里这个项目叫mpi_t1,左边应用就应该选择mpi_t1。

然后,找到Executable编辑框右侧的向下箭头,选择Select other,在路径里输入 /usr/bin/mpiexec ,点击OK即可

然后在Program arguments里输入 -n 4 ./<你的应用可执行文件的名字> ,比如我这里叫mpi_t1,应该输入 -n 4 ./mpi_t1 ,这里4代表的是你电脑处理器的核心数,如果你的电脑没有4核心,也要修改。

然后修改Working directory,为你的项目目录+ cmake-build-debug ,一个比较简单的方式是直接到项目左侧的项目文件栏右键 cmake-build-debug 文件夹,然后选择Copy Path

最后修改的效果如下:

现在,你可以使用Build+Run来直接编译和运行你的OpenMPI程序了。

重装Win10并删除ESP分区后,修复Ubuntu16在UEFI的双系统引导

介绍

最近笔记本的win10一直无法升级到最新版本,查看原因后发现是ESP分区太小了,只有不到100M,而win10推荐的大小是至少500-700M的空间。为了扩大处于分区表开头位置的ESP分区,我删除了ESP以及在ESP之后的win10系统分区。现在硬盘上还存在于Ubuntu的两个分区,一个是挂载点 / ,一个是 /home

由于ESP分区直接被删除并且在Win10的重新安装中被彻底重置,原先Ubuntu的EFI启动文件已经被删除。经过多方查找资料。修复的方法如下。

首先,我们用一个Ubuntu的live cd(刻录的U盘也是可以的)启动系统。如果你想先启动你之前的Ubuntu系统内核,请遵循下面的步骤,如果想直接用live cd修复,请直接到修复部分。

启动原Ubuntu内核

在GURB页面按c进去命令行模式,接着输入 ls 命令。屏幕中会显示目前所有识别的硬盘以及分区。比如 (hd0,gpt1), (ht0,gpt2) 之类的。接下来,使用命令 ls (hd0,gpt1)/ 查看这些分区下面的文件夹,找到原先Ubuntu系统 / 挂载点所在的分区。用上面的命令尝试所有的分区(更改命令中的 gpt1 为对应的序号),找到含有 /boot 文件夹的分区。

找到之后(比如我们确定了是 gpt3 ),我们输入 set root=(hd0,gpt3)

然后,我们输入 set pager=1 来确保分屏显示。

然后,输入 cat /boot/grub/grub.cfg 来查看原grub的配置文件。找到第一个 menuentry 的启动项。

记录上面以 linux 开头这一行的命令,注意可能有折行,要一直抄到尾部,UUID不能错。

然后,稍微上面几行,记录以 initrd 开头这一行的命令。

然后,我们依次输入上面记录的两个命令,注意不要出错。最好拍照片拍下来,除了UUID,其他路径部分都是可以用tab补全的。

最后,我们输入 boot 命令,启动系统。

修复引导

如果你是使用live cd,请先输入下面的命令进入root用户

然后,我们添加 boot-repair 的ppa源并安装,我们需要使用这款软件进行修复。

然后,我们使用 sudo boot-repair 命令运行这个工具,然后选择第一个选项。然后按照该工具的提醒进行修复即可。最后这个工具会生成一个报告,可能会花一点时间,耐心等待就好。

显示下面这样的提示证明修复成功,可以重新启动系统进入BIOS调整UEFI的启动顺序为ubuntu即可。

博主在使用 boot-repair完成修复后,发现编辑 /etc/default/grub 的自定义设置不生效了,并且 boot-repair生成的启动菜单项目太多。如果你也遇到上面的问题,你可以在上面的所有操作完成后,进入到你的Ubuntu系统,运行下面的命令重装你的GRUB2

然后再重启系统即可。

Ubuntu 安装VirtualBox增强功能

首先保证虚拟机已经挂在增强功能的安装盘

以下命令均需要使用root用户登录或使用sudo执行

然后安装下面的软件包

然后,挂载光盘

最后,打开目录执行安装脚本即可,安装完之后需要重新启动

 

为Ubuntu新创建用户创建默认.bashrc并自动加载

首先,su – 到新创建的用户

拷贝默认的.bashrc过来

然后创建.profile文件

粘贴下面的内容

想立即生效,执行下面命令

 

Ubuntu 编译安装shadowsocks-libev

编译安装shadowsocks-libev

shadowsocks-libev现在的默认分支为rm,clone的时候需要指定分支为master

当作为客户端使用时的配置文件

在Command Line Tools中使用ss代理

安装proxychains

编辑文件 ~/.proxychains/proxychains.conf

复制粘贴下面的内容

使用方法

 

Ubuntu通过gitolite快速部署git server并开启master分支网站代码自动部署

安装git和gitolite

首先,通过下面的命令安装git和gitolite

添加git用户组

配置密钥

接下来在本地机器生成ssh密钥,使用下面的命令

当然,如果你想为你的gitolite分配单独的密钥,可以使用下面的命令(生成名为git-admin的密钥)

如果你使用了单独分配的密钥,你需要配置你的git在连接指定域名时使用不同的密钥,比如我们这里gitolite的管理域名是 admin.xxx.com 。我们在刚才的.ssh文件夹新建 config 文件(没有扩展名),内容如下

这样就可以在连接admin.xxx.com的时候使用git-admin这组密钥了

初始化gitolite

下一步,将你的ssh公钥上传到服务器的某个位置,比如 /tmp/git-admin.pub

然后切换到git用户,使用这个公钥初始化gitolite

然后在持有私钥的机器管理gitolite即可,下面是clone命令,注意修改ip地址

关于gitolite的官方文档在这里:http://gitolite.com/gitolite/gitolite.html

自动部署

然后关于配置自动部署,首先我需要部署的网站目录权限为 www-data:www-data

我把git用户添加到了www-data组中,通过后面权限设置为770保证网站和git都有足够的权限操作文件。使用下面的命令

然后网站目录,比如创建 /home/nginx/xxx ,我们要把这个目录的用户组改成www-data并给予770权限,这样以后我们的git用户才能操作

然后我们切换到git用户,在 /home/nginx/xxx 目录克隆本地库,使用下面的命令。注意clone后面最后有一个参数 .

这样网站目录就初始化完成了,我们继续下面的操作(还是git用户的身份)

钩子文件创建在项目库的hooks文件夹 ~/repositories/xxx.git/hooks ,新建 post-receive 文件,复制粘贴下面的内容,最后别忘了给予本脚本执行权限。就可以退出git用户身份了

解释一下:

首先我们循环读取所有push的请求,当发现是push到master(也就是我们的部署分支)时,触发部署脚本,首先要清楚GIT_DIR环境变量,这样才能切换工作目录。然后我们切换到nginx的网站目录,使用 git add -A && git fetch origin && git reset --hard origin/master 强制清除本地变化并更新到远程master分支。如果有网站自动生成的文件(比如用户上传的附件目录)不想被清空的,别忘了要写在 .gitignore 文件里。当然网站生成的文件请确保权限在770以上,否则可能会导致git无权操作。在更新完远程master分支的代码后,更新文件权限为770,并将所有者改成www-data组(chmod使用末尾的*可以确保不会修改网站目录下.git这个隐藏目录内部的权限,同时-f用来屏蔽错误信息)

 

在编写本篇文章的时候感谢下面这位非常热心的博主解答我好多问题
https://argcv.com/articles/2078.c