前言之前提到过当前公司正在进行国产化方面的东西,目前有个桌面软件需要迁移到Linux下,于是通过Avalonia UI实现了一下,具体实现过程还算顺利,跟WPF相比虽说有些差异但感觉可以接受,也可能跟本身项目不复杂有关,毕竟就三个窗口。在添加完桌面快捷方式之后遇到了点问题,于是就有了这篇日志。创建桌面快捷方式新建一个utf-8格式的文本,名称改为应用名称,后缀改为.desktop就可以了,为避免误人子弟,常用内容可参考这里,下面是例子:[Desktop Entry] Name=XXXX Type=Application Exec=/home/test/xxx Path=/home/test/xxx Icon=/home/text/xxx.png StartupNotify=true完了之后只要将该文件复制到桌面上就变成启动快捷方式了,如果想在开始菜单中或启动器中看到,就把该文件复制到/usr/share/applications目录中就可以了。也可以增加Categories指名应用分类,这样就可以出现在开始菜单或启动器中的不同分类下面了,具体分类可以参考这里路径问题正常项目启动时会生成
前言最近公司打算将操作系统迁移到Linux环境下,于是调研了一下现有引用类库的情况,项目中有个最主要的引用是国产的TLQ,多个项目引用了,看了一下TLQ的介绍,本身就是跨平台的,不过公司在用的是官方给的.net framework版本,本身不是跨平台的,经过协商,对方把源码发了过来,改为.net standard2.0也编译通过了,在Linux下却出问题了。Lib引用对于源码中所有P/invoke相关的将dll去掉,在Linux系统下,会自动查找lib开头的类库,如果仍然查找不到,就要设置类库的加载位置了,很简单,一共两种方式,一种是增加LD_LIBRARY_PATH的环境变量,一种是编辑/etc/ld.so.conf文件,增加类库目录,由于网上讲解很多,不再赘述。内存对齐遇到的最大问题是在Windows下一切正常,但是在Linux下会报段错误,第一次遇到的时候还很懵逼,后来查了一下原来是指针越界或重复释放内存之类的操作,刚开始的时候由于改动了代码,一直以为是自己改出来的问题,尝试了很多方式都一无所获,后来又经过协商才发现跟自己的改动完全没有关系,问题是出在了一个结构体上,这个结构体一
前言最近部署到linux的程序遇到段错误,网上查了一些原因,基本上看不出有用的东西出来,于是只能根据gdb进行排查。寻找core文件就是内存转储文件,程序崩溃时会自动提示:段错误(内核已转储),gdb调试的时候必须依赖转储文件才能调试。要进行调试还需要知道两个问题:core文件在哪以及为什么没有生成文件位置要查看文件在哪,可以直接执行 cat /proc/sys/kernel/core_pattern根据输出内容进行判断,如果为core则代表在执行文件同目录生成,如果为/usr/lib/systemd/systemd-coredump %P %u %g %s %t %e 则代表着被coredumpctl接管了,下面说一下如何从coredumpctl提取core文件,其实很简单#查看所有的内存转储文件 coredumpctl list #默认会显示出所有的内存转储文件,我们大部分关心的应该是最后一项,拿到pid后 coredumpctl -o core dump pid执行完之后就会在当前目录中生成core文件了,文件名可以自定义。文件没有生成默认系统是关闭core文件生成的,可以通
起因最近在论坛里看到有人部署的小说网站,感觉界面还挺好看,联想到之前DP家的100G硬盘的VPS,本来部署的图床,可惜不怎么用,就想折腾弄成小说站,话说也不能浪费了之前下载的15G的小说是吧。乱码问题本身用的是Java写的,就一个jar包很简单,直接放到VPS上启动,但是访问的时候总是提示:malformed input or input contains unmappable characters,后面跟着一个路径,一眼看上去路径最后的图片名都是????.jpg,很明显是编码问题,怎么解决呢?因为大部分的VPS用的都是debian的系统,于是查了一下,说是要配置中文,于是通过dpkg-reconfigure locales命令重新配置,并且默认选用zh_CN.UTF-8,但是依然不起作用,看了一下bashrc的配置,发现原来为了登录的时候不提示错误,配置的export LAN=C,改为zh_CN.UTF-8依然不起作用,为此还重启了一次。后来看到可以通过配置java的启动环境变量来配置java -Dfile.encoding="UTF-8" -Dsun.jnu.e
2023-02-18更新最近在升级nerdctl时发现有些地方变更了,最新的文档可以参考containerd官方的文档了起因一直在用nezha探针,服务端的部署方式很简单,直接用docker部署就可以了,但是自从上次迁移到racknerd之后出现了严重的内存泄露问题,如果一直看着dashboard,初始状态下从还不足50%会一直占用到70-80%,尝试各种限制但是效果并不明显。后来发现轻量级的containerd,进一步发现docker本身也是间接的管理containerd,既然都是containerd,那为什么还要装docker呢?于是尝试从docker迁移到containerd。安装containerd官方的安装说明也很简单,直接下载官方包,解压就可以了,具体安装如下:#目前最新版为1.6.8,具体可以参考官方说明 wget https://github.com/containerd/containerd/releases/download/v1.6.8/cri-containerd-1.6.8-linux-amd64.tar.gz #解压进行安装 tar -C / -xzf cr
起因一直都在用acme.sh脚本进行证书签发,直到最近在给探针的域名进行签发的时候,不知为何总是一直load最后失败,加debug也看不出问题来,初步感觉可能是反代的问题就没管,最近进行了一次探针面板迁移,配置完之后发现所在服务器的其它域名也会一直load,签发不成功,甚是脑袋疼。解决直接说解决方案:尝试更换CA机构,最开始acme.sh默认的是Letsencrypt,后来改为了ZeroSSL,起初也没感觉有什么不同,这次始终不行,于是干脆就先切换了一下签发机构,切换完了立马就提示错误,具体错误想不起来了,大致就是因为在80端口开启了http2,签发机构认为不安全不进行签发。大致想了一下,因为之前嫌改端口麻烦,就把探针面板的监听端口通过80反代了,由于哪吒探针需要启用http2,所以就直接走的80端口,但是不知为何其它域名也受这个影响。知道原因就好解决了,先去掉http2再进行签发就可以了,顺便把端口又改为443再启用http2。总结目前看来还是Letsencrypt更好一点,起码出现问题时会先提示,不会想ZeroSSL傻傻的跑完了然后提示超时。所以等下一次签发不成功并且没有提示的时候
很久之前买的sentris家的小鸡最近突然离线了,之前图省事装的是debian8,可能是因为性能太差或内存太小吧,经常会挂掉。想想这性能啥也干不了还是换成alpine吧,然后就打算只挂个探针,可是哪吒官方的安装脚本里面暂时还没有alpine,只能自己捣鼓了。安装虽然官方没有提供一键安装脚本,但毕竟是golang开发的,直接下载二进制就可以了。启动废话不多说,直接nohup启动就得了,nohup /home/nezha-agent -s 服务器地址:端口 -p 密钥 0 --report-delay 3 --skip-conn --skip-procs -- disable-command-execute &开机启动网上查alpine的开机启动目录在/etc/local.d下,可以在这个目录touch一个启动文件,然后把上面的脚本拷贝到文件里面,比如我们就叫做nezha.start,然后赋予执行权限,然后再加到开机启动里面就可以了,具体操作步骤如下:#创建启动文件 touch nezha.start #获取shell路径 echo $0 #编辑开机文件内容 #!/bin/
最近php爆出两个漏洞,分别为:CVE-2022-31625和CVE-2022-31626,涉及MySQL和postgresql,由于本站数据库采用的是postgresql,所以修补了一下。默认的php版本直接用的apt安装的,直接更新的话是无效的,因此找了半天,找到了deb.sury.org维护源。对于Debian 11(bullseye) 更新很简单:echo "deb https://packages.sury.org/php/ bullseye main" >> /etc/apt/sources.list.d/php.list然后接着apt update更新一下包然后再apt upgrade进行升级就可以了。
最近virmach支持迁移到其它地区的Ryzen服务器,正好之前买的ip被墙了,由于当时在忙工作,没注意,过了几天才发现是被墙的,也懒得找客服,心想就等着解封吧,结果等了将近半年依然没有解封,看来是永封了,正好现在支持迁移就立马迁移到西雅图了。由于迁移的比较仓促,只备份了哪吒探针的服务端,没有备份相关的nginx配置,所以之后又重新部署了一遍。下面就梳理一下迁移流程:备份服务端下的/opt/nezha文件夹。在新服务器上新安装哪吒服务面板,安装完成之后将之前备份的覆盖到本地的/opt/nezha文件夹下,启动就可以了。配置nginx转发,由于客户端连接的域名通过nginx转发之后无法进行域名证书续签,所以只好走80端口了。具体的nginx配置如下:(1)服务器端转发配置: location / { proxy_pass http://127.0.0.1:8008; proxy_set_header Host $host; } location /ws { proxy_pass http://127.0
最近把公司内网的禅道迁移到外网,由于不想装apache,所以没有采用一键安装的方式,采用了nginx+fastcgi的方式安装,数据还原完成后不知道为何找不到备注了,并且访问地址必须为:地址+zendaopms/www才行,看上去非常别扭,网上查大部分都是通过nginx反向代理apache的地址,或者是直接根目录访问,因为后面还有别的业务要用,所以想配置成/zentao这种访问方式,查了半天,最终在官方的问答里找到了配置方式,nginx采用如下配置:location ~ ^/zentao/.+\.php$ { root /opt/zentao/www; fastcgi_index index.php; fastcgi_pass unix:/run/php/php7.0-fpm.sock; if ( $fastcgi_script_name ~ ^/zentao/(.*\.php) ) { set $cginame $1; } fastcgi_param SCRIPT_FILENAME $document_root/$cginame;
hellojxl