升级gitlab自9.4.5到12.1.3版本

gitlab所在服务器进行了操作系统升级,从ubuntu 14.04升级到18.04,而且gitlab自身很久未进行升级,导致与现有版本有较大差距,升级过程有一定周折,所幸最终还是成功升级。

首先参考此网站进行升级:How to upgrade to latest Gitlab from version less then 10.8

但操作升级的不顺利,版本升级时全提示版本不对,不能升级。

使用apt list -a gitlab-ce*命令时发现其最小版本为10.7.0,于是尝试从这个版本进行升级,发现可以操作:

sudo apt-get install gitlab-ce=10.7.0-ce.0

然后再这个版本基础上再进行大版本升级,最终顺利升级至最新版本。

在ubuntu 18.04上安装最新版greenplum(7.0.alpha)

近期组建了一个新的大数据测试集群,由4个物理机器构成一个测试集群,分别命名为hadoop1-4号机器,想要进行MPP并行数据库的安装与测试工作。服务器物理机安装的操作系统为ubuntu server 18.04版本。开始以为可以采用lanchpad的官方库进行安装,发现greenplum官方目前并未支持ubuntu 18.04,需要从源码编译安装。在尝试编译的过程中遇到了几个错误,最终通过一个变通的方法进行了处理,在此记录一下过程。

简而言之,是greenplum所采用的xerces-c库与ubuntu官方库的版本不一致,导致调用时遇到了DSO missing错误。可以采用禁止gporca的查询优化器方法来避免此错误,同时安装postgis插件也需要禁止raster功能,或者移除官方的xerces-c库,使用greenplum自带的xerces-c库。

下面记录一下第二种方案的编译过程。

一、安装gp-xercesc

git clone https://github.com/greenplum-db/gp-xerces.git
cd gp-xerces
mkdir build
cd build
../configure --prefix=/usr/local
make
sudo make install

二、安装gporca

git clone https://github.com/greenplum-db/gporca.git
cd gporca
cmake -GNinja -H. -Bbuild
sudo ninja install -C build

三、安装gpdb

git clone https://github.com/greenplum-db/gpdb.git
cd gpdb
sudo ./README.ubuntu.bash

此时系统会默认安装libxerces-c-dev库,需要将此库移除以使其正确编译。

sudo apt remove libxerces-c-dev   ###此库会有冲突
./configure --enable-orca --with-perl --with-python --with-libxml --prefix=/usr/local/gpdb
make -j32
sudo make -j32 install
sudo ldconfig

这样可以确保编译通过,且可安装,但在初始化greenplum之前还需要确保:

1、master机器到其他机器可以ssh密钥登陆

2、limits.conf和sysctl.conf已修改,且修改后重新登陆过。

3、在其他各机器执行相同的操作。

上述操作执行完之后,在master节点,指定某一目录作为greenplum的数据目录,比如/data,然后在master节点上建立/data/master目录,在所有节点上建立/data/primary目录。然后:

source /usr/local/gpdb/greenplum_path.sh
cd /data/master
cp /usr/local/gpdb/docs/cli_help/gpconfigs/hostfile_gpinitsystem .
cp /usr/local/gpdb/docs/cli_help/gpconfigs/gpinitsystem_config .

修改这两个配置文件,hostfile记录了greenplum所有机器的hostname,一行一个机器名;gpinitsystem_config记录了greenplum的目录设置和segment设置参数,需进行相应的修改,完成后即可启动数据库。

gpinitsystem -c gpinitsystem_config -h hostfile_gpinitsystem 

ubuntu 18.04中设置dns server

ubuntu 18.04及之后的版本,发生的一个变化,就是网络地址设置的更改。

在之前的版本,修改ip地址、dns地址等都可以在/etc/network/interface中进行修改,dns可以在/etc/resolv.conf进行修改。而在18.04版本后,ubuntu启动了netplan系统,所有这些修改都使用netplan进行调整,具体配置都放在/etc/netplace/*.yaml文件中:

network:
  version: 2
  renderer: networkd
  ethernets:
    eno1:
      addresses: [ 210.77.77.35/24 ]
      gateway4: 210.77.77.254
      nameservers:
        addresses: [114.114.114.114,210.77.68.240]

参考:https://www.techrepublic.com/article/how-to-set-dns-nameservers-in-ubuntu-server-18-04/

遭遇Out of memory: Kill process or sacrifice child

在调试一个爬虫程序时,发现一个非常奇怪的问题,程序总是在运行一段时候会被系统给Kill掉,在syslog里看到:

Nov 9 11:52:20 iZrj9iqn00z9x3jgz1v2t5Z kernel: [5542452.233851] Out of memory: Kill process 10526 (python3) score 738 or sacrifice child

服务器是1台2G内存的云服务器,内存不够?那就暂时使用虚拟内存扩充上来:
swapoff -a
dd if=/dev/zero of=swapfile bs=1024 count=4000000
mkswap swapfile
swapon swapfile

这样就临时加了4G虚拟内存上来,保证程序在峰值运行时不被kill。

参考:https://plumbr.io/blog/memory-leaks/out-of-memory-kill-process-or-sacrifice-child

在ubuntu 16.04上安装MapD问题小结

这是一个初步的小结,记录中间所踩的坑,同时在我的服务器尚有问题未解决。

从官方的github库直接下载下来,按照官方指南进行编译。

mkdir ~/mapd && cd ~/mapd
git clone https://github.com/mapd/mapd-core.git
cd mapd-core

0、准备工作

需要已经安装好nvidia cuda相关的驱动和软件包。

1、安装依赖包

cd scripts
./mapd-deps-ubuntu.sh

在安装thrift时遇到第一个坑,居然golang.org官方网站已经被墙,导致其在安装一些附加包时遇到网络错误,编译过程终止。

解决办法:可以使用github的官方镜像库下载到指定目录后安装,然后再进行编译。

在编译过程中需要用到go的net包和gomock包。

mkdir -p $GOPATH/src/golang.org/x/
cd $GOPATH/src/golang.org/x/
git clone https://github.com/golang/net.git net
go install net
git clone https://github.com/golang/mock.git mock
go install mock

关键要判断好$GOPATH这个路径,根据错误提示来确定对应的路径,其中一个是scripts/thrift-0.10.0/test/go/。

第二个坑是在mapd-deps-ubuntu.sh脚本中已经安装了诸多依赖,但其实还不完整。还需要安装:

sudo apt install cppcheck clang-tidy libegl1-mesa-dev

不过,这个在github上有一个issue也指出了方案。

编译完成后,其自动安装到/usr/local/mapd-deps目录下,其提示需要执行一个sh脚本,这又是一个小坑。即脚本执行完成后,运行程序还提示相关库文件找不到。

这时应该将对应的目录加入/etc/ld.so.conf.d目录下,即在此目录下添加一个文件,如名称为mapd.conf,其内容为:

/usr/local/mapd-deps/lib

然后执行:

sudo ldconfig

这样就可以将库目录搜索路径加进来了。

2、编译MapD

参照官方说明处理

cd ~/mapd/mapd-core/
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=debug ..
make -j $(nproc)
sudo make install

这样就可以安装完成,但在服务器上运行时还存在问题,待摸索后再记录。

ubuntu中禁止ipv6

之前提到如何临时禁止ipv6,目前发现机房环境的ipv6基本已经瘫痪,就想长期禁止ipv6,否则在使用过程中会遇到各种奇怪的问题。

修改配置文件:

sudo nano /etc/sysctl.d/99-sysctl.conf

将其内容修改为:

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

然后将其生效:

sudo sysctl -p

这样就可。

参考:
https://www.linuxbabe.com/ubuntu/disable-ipv6-on-ubuntu

ubuntu 16.04中安装oracle java7

oracle java7官方已经停止支持了,但数据中心系统集成的geonetwork版本依然需要java7才能工作良好,使用webupd8team的源里虽然还有java7的安装包,但由于oracle官方的下载源已取消,导致不能成功下载,安装持续失败。从oracle的官方存档中还可以下载,但需要有oracle的账户。

之后,发现另外一台服务器的缓存中,oracle java7的安装包依旧还在,因此可以拷贝过来直接使用:

scp user@another.server:/var/cache/oracle-jdk7-installer/jdk-7u80-linux-x64.tar.gz /var/cache/oracle-jdk7-installer/
sudo apt-get install oracle-java7-installer

这样就可以成功安装了。

ubuntu服务器无法上网问题

服务器搬家后遇到的第二个大问题,三台机器(1台Dell PowerEdge R720,2台R920)都无法上网。分配了新的ip地址后,居然都ping不通网关。
R720最简单,将ufw关掉就解决了。

sudo service ufw stop
sudo ufw disable

但那两台R920,遇到了非常奇怪的问题。之前用ubuntu 14.04安装的时候,网卡是识别为em1的。后来升级为ubuntu 16.04后在之前机房也一直正常上网。搬迁之后使用新地址无法上网,因此直接就认为是网络地址的问题,和网管交涉后他们说没有限制。使用笔记本接入相同网络地址居然是正常的。这说明网络地址是没有问题的。

ufw关停,未解决。 tor关停,未解决。dnsmasq关停,未解决。
狠心重装了一台机器,在安装界面中注意到系统将网卡识别为eno1,但启动后无网络。ifconfig -a后发现网卡识别为em1。重新设置网络地址后,居然还不能上网。

再次搜索,发现网络上有可以在grub中设置网卡地址名称,将其设置为常规的eth0之类的网口,于是试验看看。修改/etc/default/grub
将其中的:

GRUB_CMDLINE_LINUX=””

修改为:

GRUB_CMDLINE_LINUX=”net.ifnames=0 biosdevname=0″

然后更新grub:

sudo update-grub

设置网络地址为eth0,重新启动系统。

这样居然可以解决问题!

小结:看起来应该是这个版本的一个bug,应该是网卡识别的问题。

参考:
https://askubuntu.com/questions/767786/changing-network-interfaces-name-ubuntu-16-04

ubuntu 14.04升级到16.04遇到”无法计算升级”问题

一台服务器上计划操作系统升级,从ubuntu 14.04升级到16.04。但在do-release-upgrade过程中遇到了”无法计算升级”问题,导致升级程序退出。

网上搜索一圈后,最后在这儿找到答案:https://askubuntu.com/questions/202730/how-to-fix-the-unable-to-calculate-upgrade-issue-when-upgrading-from-12-04-to?answertab=votes

问题的关键,是要去看这个log文件:/var/log/dist-upgrade/main.log
不要被apt.log里一堆Broken误导。

BTW:最终检查问题也是postgresql-9.3-postgis-2.1的问题。

ubuntu临时禁止ipv6

单位的ipv6网络坏掉一段时间了,导致使用ipv6访问网站会链接不上,需要临时禁止掉ipv6网络。
在ubuntu下,加入要禁止eth0的ipv6网络,可以:

sudo su
echo 1 >> /proc/sys/net/ipv6/conf/eth0/disable_ipv6