postgresql安装配置
安装
前置依赖
系统是ubuntu 24.04 LTS,开机启动使用了systemd,所以先安装相关依赖包
1 | sudo apt install libsystemd-dev |
编译安装
官网推荐使用pre-packaged方式,稳定可靠,适合生产环境。不过我想用最新版,就直接用源码编译安装了
1 | # 进入源代码目录 |
到这里,postgresql完成安装、初始化
系统是ubuntu 24.04 LTS,开机启动使用了systemd,所以先安装相关依赖包
1 | sudo apt install libsystemd-dev |
官网推荐使用pre-packaged方式,稳定可靠,适合生产环境。不过我想用最新版,就直接用源码编译安装了
1 | # 进入源代码目录 |
到这里,postgresql完成安装、初始化
当前仅展示apt方式安装,离线安装方式不展示
如果系统有预装docker或者先前安装过,先卸载干净在安装
1 | ## 第一次安装时输出为空 |
由于docker被gfw屏蔽,访问时需要使用vpn,这里使用先前搭建的ss服务
新建apt.conf
1 | sudo vi /etc/apt/apt.conf |
添加proxy配置,默认源地址配置直连,如此后续配置docker源后,使用apt update
便可直接访问
1 | Acquire::http::Proxy "http://127.0.0.1:8118"; |
一般情况下,日常开发我只使用vagrant跟virtualbox,但后面想搭建一个k8s环境学习,需要一个免费、高性能、便于管理的虚拟机管理软件
综合考虑了下现在市面上的虚拟机管理软件
最终我选择组装一台台式机,安装了ubuntu系统,并在上面安装使用kvm虚拟机
cpu是amd 7700,8核心16线程;32GB内存;暂时不需要用到显卡;PC在路由器做了MAC跟IP的绑定,方便使用ssh
由于virt-manager太难用,最后选择cockpit作为kvm虚拟机管理软件
确认cpu开启虚拟化功能
1 | # 一般是cpu的核心数量 |
安装kvm以及依赖软件
1 | sudo apt install qemu-system-x86 libvirt-daemon-system virtinst \ |
由于国内恶劣的网络环境,作为一名频繁访问外网的Web开发者,不得不自建一个VPN服务,以下简单介绍Shadowsocks的搭建过程。
单纯的ss流量会迅速被gfw识别到并屏蔽,因此使用ss时需要增加obfs用以混淆欺骗gfw,可以极大程度减小被屏蔽的风险。当然,如果你用的是比较出名的服务器供应商,如bandwagon的服务器,那么被屏蔽的机会也很大。
服务端使用的一键安装脚本twist由于开发者已经放弃维护长时间,目前只有参考作用,如果你有耐心,也可以自己修改后再使用,也就跟下面的服务端搭建教程一样。搞完是真的累,太渣了,太需要提高自己的编程水平,写一个一体化的软件包才行
服务端使用的是twist脚本,里面集成了Shadowsocks+simple-obfs+fail2ban以及相关依赖包,使用shell编写,感兴趣的可以看看源代码,下载地址如下
1 | https://github.com/forestbat/Twist |
下载后,脚本添加执行权限
1 | chmod +x twist |
切换到root账户,twist执行需要
1 | su - root |
以下简单介绍如何在C语言层面使用PHP类
创建一个PHP对象,对象类似关联数组,对象之上可关联任意多个函数
1 | PHP_FUNCTION(makeObject) { |
调用函数并打印结果var_dump(makeObject());
,输出如下
1 | object(stdClass)#1 (2) { |
从19年开始,ss流量已经能被gfw识别并屏蔽,原本打算切换到v2ray,但配置混淆需要域名反而会暴露出更多信息,此外,网上一篇文章指出v2ray开发者失联的同时一项v2ray流量识别的专利被注册,因此决定放弃v2ray并转向另一个被linus盛赞的wireguard。
wireguard是非常简单、现代化、快速的vpn,使用最新的加密技术,udp传输,支持ip漫游等。wireguard没有服务端、客户端的区分,每一台设备都是一个peer
。
添加wireguard的PPA源
1 | sudo add-apt-repository ppa:wireguard/wireguard |
wireguard作为linux内核模块方式加载,内核更新wireguard也会自动重新编译,重启系统或使用modprobe
开启模块
1 | sudo modprobe wireguard |
检查wireguard模块是否成功加载,成功输出与下面类似
1 | vagrant@bionic:~$ lsmod | grep wireguard |
wireguard提供了两个命令行工具wg
以及wg-quick
,使用wg
生成公钥和私钥
1 | umask 077 |
类似ssh,需要为每台设备生成一对publickey/privatekey
本文将简单介绍资源类型、资源的创建、访问、销毁操作。不再建议使用资源类型,使用类更为合适
zval
可以表示大部分的PHP数据类型,但有一样不能很好的表示其结构:指针。由于不透明的结构、无法使用传统运算符进行操作等,使得指针在PHP的表示变得困难。因此PHP用一个特殊的标记表示指针:资源,为了使资源标记具有意义,必须先注册到zend engine才能使用。
在头文件定义结构体php_test_person
以及资源名称,放置在#define
语句后,PHP_MINIT_FUNCTION(test);
之前
1 | typedef struct { |
源文件定义le_*
全局变量,MINIT阶段注册,用于获取资源类型、字面意义名称、析构函数
1 | int le_test_person; |
PHP扩展开发第二章,主要介绍函数参数获取、zval数据类型、数组及数组遍历以及$GLOBALS全局变量访问
扩展自定义函数不需要声明形参,Zend Engine会给每个函数传递一个参数列表zend_execute_data *execute_data
,函数参数通过宏块ZEND_PARSE_PARAMETERS_START
、ZEND_PARSE_PARAMETERS_END
获取,当然,旧的方法zend_parse_parameters
也可以使用,只是会更麻烦点
下面示例函数将接收参数name以及打印的次数t_param并打印name
1 | PHP_FUNCTION(test) |
常用的有数据类型以及参数获取方法有下
Variable Type | Macro |
---|---|
zend_bool | Z_PARAM_BOOL |
zend_long | Z_PARAM_LONG |
double | Z_PARAM_DOUBLE |
zend_string * | Z_PARAM_STR |
char * | Z_PARAM_STRING |
zval * | Z_PARAM_RESOURCE |
zval * | Z_PARAM_ARRAY |
zval * | Z_PARAM_OBJECT |
zval * | Z_PARAM_ZVAL |
flamegraph是一款可视化工具,用户分析程序堆栈调用,x轴堆栈轨迹,y轴堆栈深度,x轴长度越长,占用更多cpu时间。下面简单介绍如何使用xdebug以及flamegraph生成火焰图
配置xdebug参数
1 | xdebug.trace_output_name = xdebug.trace.%t.%s |
下载flamegraph,git clone https://github.com/brendangregg/FlameGraph.git
,放置在任意位置
获取堆栈数据
请求页面/接口url,在url后面增加?XDEBUG_TRACE=<secret key>
,获取php堆栈数据 curl http://youdomain.com?XDEBUG_TRACE=<secret key>
,如果是命令行命令,则在php命令后使用参数php -d xdebug.auto_trace=1
转换堆栈数据
1 | ./stackcollapse-xdebug.php /tmp/xdebug.trace.1579703170._data_www_yii2_web_index_php.xt > out.folded |
生成火焰图
1 | ./flamegraph.pl out.folded > out.svg |
示例
How to generate PHP Flamegraphs
Flame Graphs visualize profiled code
很长的一段时间,被xubuntu下的一个monospace字体显示问题困扰着,在网上找了很多方法也没有解决问题,在一次误打误撞的情况下解决了,简单把自己问题的过程记录下来,希望给一些小伙伴们帮助
xubuntu下monospace在浏览器以及vscode下显示异常,具体如下图所示
浏览器chrome/firefox下的monospace
vscode下的monospace
网上搜索结果大部分指示,是由于libfreetype6 2.8.1-2ubuntu2的一个bug导致,需要升级到最新的libfreetype2.9或者降级到libfreetype2.8.0,按照搜索的文档进行libfreetype的升级/降级后,显示效果依旧,问题没有得到解决
在我放弃治疗后过了一段时间,突然想起,一直以来都忽略了验证linux的字体信息。首先,获取显示异常的字体font-family,如下图
使用fc-match验证字体
1 | $ fc-match monospace |
可以看到Menlo、”PingFang SC”、”Microsoft YaHei”的实际字体跟monospace并不一致,抱着死马当活马医的心态,编辑字体配置文件~/.config/fontconfig/fonts.conf
,内容如下,
1 | <?xml version='1.0'?> |
退出,重新登录,发现这个困扰了很久的问题终于解决,如下图
vscode可以通过更改font-family恢复正常的显示效果
注意
ubuntu/xubuntu、中文/英文的系统默认的字体会有些许差异,以上的操作可能不一定生效,可以新增~/.config/fontconfig/conf.d/00-menlo.conf
1 | <?xml version="1.0"?> |
[Ubuntu 18.04 LTS] Font not rendering properly
Ubuntu 18.04 LTS Font not rendering properly
Why doesn’t fc-match respect my match and edit rule for Courier when it does for Consolas?