前些天,我在家里的机器上重新尝试编译了一下hived的v1.27.11版本。为什么要去编译而不是使用别人编译好的现成版本?这当然是为了保持手熟。
(图源 :pixabay)
而且自己编译除了费劲一些以外,有很多优点:比如通过编译去了解最近有哪些主要变化;又比如在硬分叉或者紧急更新节点的时候自己编译会快人一步;还有就是当我们尝试做些修改(比如直接读取一些数据时)就可以自己编译带需要功能的版本。等等等等,就不一一赘述了。
说起来,以前我曾经在Amazon搞了个CPU超快、内存超大的机器来专门用来编译各种程序,当然价格也超贵,编译起来超快超爽。
早在一年多以前,我就无力负担这样昂贵的机器啦,所以距离上次编译v1.27.6也足足过了一年有余,我甚至都要忘记编译需要咋弄了。
既然无力支持昂贵的Amazon实例,那就只好在本地机器上搞了!其实我本地机器也是超级强悍的,但是有个问题——git 获取各种软件的仓库那叫一个慢呀。
你看,我这抓取速率只有257.00 KiB/s,也不知何时是个头!
若是这个速率稳定还好,实际上它可能卡这半天,所以要想能让其正常工作,就必须采取一点措施。
我采取的方法是在一台香蕉派(类似树莓派的卡片机)上运行一个socks5代理(SSH转发),然后在我的工作环境下执行如下指令:
export http_proxy=socks5://ip:port
export https_proxy=$http_proxy
这样,我在当前工作环境下的HTTP以及HTTPS流量都会通过代理啦,速度和稳定性大幅提升。这是使用代理后的速度:
足足提升了六倍有余,而是超稳定,终于可以愉快地搞事情啦。
之后原本以为会一切正常,结果竟然出现如下错误
额,好吧,虽然我管这台大机器叫开发机,但是之前一些编译工作都是在Amazon超贵的EC2实例上弄的,还真没在这个机器上装cmake,那就装呗。
sudo apt install cmake
搞定一个错误,结果一波未平一波又起,又出新错误啦:
咦,这个貌似以前遇到过,io_uring 是 Linux 内核引入的一种 高性能异步 I/O机制。
不过貌似hived的代码中并没有用到io_uring (可能rocksdb代码中用到了),不研究了,直接干:
sudo apt install liburing-dev
然后用来新错误啦,Boost找不到啦(系统里 Boost 库没有安装,或者版本 低于 1.74)
Boost 是一个 C++ 的开源库集合,HIVE的代码中没少用到,我以前编译时也没少折腾(比如手工编译指定版本啥的),不过在Ubuntu 22.04 LTS没那么麻烦,直接安装就好:
sudo apt install libboost-all-dev
然后又来新错误啦, CMake 在配置时找不到 BZip2 库及头文件:
这个看名字就是压缩用的,不研究了,直接干:
sudo apt install libbz2-dev
然后,不出意料地又出错了:
没太搞明白这个有啥用以及咋用,不过还是直接安装吧:
sudo apt install python3-jinja2
但之后还出同样的错误,后来我才注意到我在Python虚拟环境中执行相应的操作呢,退出虚拟环境就好啦:
deactivate
之后又来新错误啦:
这是由于generate_words.sh 使用 Google 的 zopfli 压缩工具,其中有如下语句:
zopfli -c --deflate -i1000 "${INPUT_FILE}" > "${DEFLATE_FILE}"
所以,还是安装就行啦
sudo apt install zopfli
之后就可以愉快地进行编译了,并且我成功地编译出了hived_v1.27.11以及相应的命令行钱包,压缩工具等等。
其实,在hive代码中setup_ubuntu.sh
中就包含了项目所用到的所有开发工具安装代码:
(图源 :pixabay)
至于为啥没用相关脚本直接安装,一方面是感兴趣本机还缺了些啥,以及这些东西都是干啥用的;另外一方面当然是折腾喽,毕竟生命在于折腾呀。
不明觉厉 膜拜O哥啊 哈哈~
哈哈,和真正的技术大佬们差得远呢
太厉害了👍🏻👍🏻
过奖过奖了
虽然不懂,但是膜拜大佬的心情与日俱增!👍👍👍
哈哈,算不得大佬
生命在于折腾,o哥真有活力啊
要累晕了
我已经把代码还给老师了,哈哈,大学的时候,我做网页还是可以,美工部分老师给我满分的!有次做编程我做的最快的,那时候记忆力也很好!
哈哈,捡起来
以前也学过C++和C语言,不过是半点记不起来了
再学一遍
O哥好有耐心,虽然不懂,但技术大佬好厉害
和真正的技术大佬们差得远呢
哇哦,O哥厉害👍
菜鸟菜鸟,就是菜鸟啦