自行搭建 IM Wechat 聊天平台 mattermost 入门配置安装教程

实在无法忍受国内 IM 软件的臃肿,简简单单的聊天搞一堆东西。安装包堪比一个系统。

今天说的这款 IM 支持全平台。WEB 安卓 苹果 PC 都有客户端。名字叫 ”mattermost“。
其实我也试用过其他 IM 。感觉这个比较符合自己的使用习惯。废话不多说,步骤如下:

1,准备一台 Ubuntu 20.04 的实体机或者虚拟机。如果外网使用,最好有公网IP。内网使用不用在乎这些。如果怕被取证,可以使用全盘加密,虚拟机也可以全盘加密。

2,命令行步骤如下:

curl -sL -o- https://deb.packages.mattermost.com/pubkey.gpg | gpg --dearmor | sudo apt-key add
sudo apt-get update
sudo apt install mattermost -y
sudo install -C -m 600 -o mattermost -g mattermost /opt/mattermost/config/config.defaults.json /opt/mattermost/config/config.json
sudo vi /opt/mattermost/config/config.json



# 这里修改配置文件,但现在还无需配置,因为你还没装数据库,我们用推荐的 postgresql 数据库

sudo apt install postgresql postgresql-contrib
sudo su - postgres -c "createuser jacker"
sudo su - postgres -c "createdb mattermostdb"
sudo -u postgres psql
ALTER USER jack90 WITH PASSWORD 'edcJacker90';
grant all privileges on database mattermostdb to jacker;
\q



# 配置好数据库就可以启动数据库了
sudo systemctl start postgresql
# 接下来再修改 mattermost 的配置文件,主要修改这几处。
定位文件 /opt/mattermost/config/config.json 确认文件内容 DriverName 这一行是 “postgres”
DataSource 这一行是,根据上面数据应该是如下:
“postgres://jacker:edcJacker90@localhost/mattermostdb?sslmode=disable&connect_timeout=10″
SiteURL” 这一行是
“http://90.life:8065”
#如果你没做 nginx 等代理转发,或者其他映射就需要这么设置。如果做了,请转换相应端口。如果加了证书就改为 https 域名请自行替换。这个设置跟你等会在 APP 上写的服务器 url 应该是一致的才对。否则会有错误。
至此所有配置完成。可以使用了。当然配置文件还有许多项目可自行研究。
sudo systemctl start mattermost 启动

这个默认配置只适合小环境使用,如果流量很多,官方推荐使用 nginx 作为前置代理处理流量。此平台一个服务器免费是 200 个名额。其实我就当个跨平台剪切板使用。

更多细节大家可以参考下面连接:
https://docs.mattermost.com/install/install-ubuntu.html


自行构建 chromium 教程,还是自己编译的浏览器好

看了官方文档,一路走来不得不说坑很多。以下所有命令均在 cmd 命令提示符下运行。

首先做好准备工作:
1,新版 chromium 需要 Visual Studio 2022 勾选如下(划红线的必选):


2,准备好大约 200G 的空间用于存放源码和编译。电脑内存最好 32G 起步。


3,安装配置 git 工具。
git config –global user.name “My Name” #设置你的名字
git config –global user.email “[email protected]” #设置你的邮箱
git config –global core.autocrlf false
git config –global core.filemode false
git config –global branch.autosetuprebase always
git config –global core.longpaths true # 解除 Windows 限制,配置 git 以允许长路径支持


4,下载 depot_tools 。解压到一个目录,比如 d:\depot_tools。并配置系统环境 PATH。
Windows 打开命令提示符 cmd ,输入 control sysdm.cpl,在 PATH 系统变量中添加 d:\depot_tools 这个目录,如果你的不一样,请自行改变。
Linux 直接 export PATH=”$PATH:/path/to/depot_tools”。这个临时变量,重启需要再次添加。也可以 git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git 拉取源码。

5,更新 depot_tools。
gclient sync

6,创建源码目录,在转到新创建的目录。
mkdir chromium && cd chromium

6,下载 chromium 源码。如果没有科学上网的可能下载不了。我这里给个百度网盘吧!
fetch chromium 或者 fetch chromium –no-history (这个可以节省时间)这个是拉取最新分支。如果要要旧版请参照这个 git clone –depth 100 -b 103.0.5060.66 https://chromium.googlesource.com/chromium/src.git src
如果不小心断掉了链接,可以用 gclient sync 来继续下载。

7,构建编译文件,设置编译参数。
Windows
cd src && gn gen out\Default (测试版)
gn args out\Release (正式版)需要输入编译参数如下
target_os=”win”
target_cpu=”x64″
is_component_build=false
is_debug=false
is_official_build=true


Android
gn gen –args=’target_os=”android” target_cpu=”arm64″ out/Default


如果需要构建调试版本添加改变以下参数

is_debug = true
is_component_build = true
symbol_level = 2

8, 构建可执行文件。

autoninja -C out\Default chrome (测试版)
out\Release chrome (正式版)

一些错误解决方案,如下:

A,No downloadable toolchain found. In order to use your locally installed version of Visual Studio to build Chrome please set DEPOT_TOOLS_WIN_TOOLCHAIN=0.

这个错误是环境变量的错误,也就是没找工具。我这里是这么解决的:
1,将 d:\depot_tools 这个环境变量放置在最前头。添加系统环境变量 DEPOT_TOOLS_WIN_TOOLCHAIN=0 。
2,卸载本身安装 Python,然后再执行 gclient sync (设置环境变量后,请重新打开命令提示符)。此时它会重新构建工具链。

B,构建速度慢

1,关闭 Windows Defender。12 13 14代intel看下大小核心调度。
2,设置 set NINJA_SUMMARIZE_BUILD = 1 && autoninja -C out\Default base,让其显示构建过程。或者执行 python depot_tools\post_build_ninja_summary.py -C out\Default
3,更多详细,参见原文

C,UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x92 in position 125: illegal multibyte sequence 出现这个编码错误不用管,也可以编译成功的。源码某些用的是 Python2,所以会有这个错误。要修正你需要找到源文件,但是跳出这个错误并没有带出源文件。

D,如果遇到 git 源码不一致问题。
gclient sync -D –force –reset
使用上述命令强行覆盖

分享自己折腾X79平台黑苹果的EFI文件

首先是自己的 :
系统:10.15.7
主板:火神x79 – s288
无线网卡 :白苹果的拆机网卡 Bcm94360cs2
cpu :e5 2696v2
ram : 32G * 4 =128G
储存:sata固态

火神X79-s288-EFI.zip:
https://url64.ctfile.com/f/22136564-957219525-d89569?p=9280 (访问密码: 9280)

搜集的如下:
E5 2660v2+X79+AX200-EFI.rar:
https://url64.ctfile.com/f/22136564-957217980-a66d57?p=9280 (访问密码: 9280)
BASE-EFI-INTEL-HEDT-2NDGEN-X79-SANDY-BRIDGE-E-0.7.1.zip: https://url64.ctfile.com/f/22136564-957217914-f6a263?p=9280 (访问密码: 9280)
X79-E5-2696-v2-R9-Nano-Clover-EFI-master.zip:
https://url64.ctfile.com/f/22136564-957217869-0cc30c?p=9280 (访问密码: 9280)

自己的基本没啥问题,就是不能点重启,否则第二次启动有几率会进不去系统,再次关机就能进去了。搜集的有支持 macOS 12 可是我的配置进不去,还请大家自行尝试。黑苹果真的没啥太多的教程,全靠领悟。

论如今社会的一些看法

这个标题格局大了,哈哈哈。其实就是自己的一点小想法。

1,整个社会都在人人自危。都不想承担责任,都在甩过来甩过去。当大家都在自保,秉承着“大事化小,小事化了。做不如不做。好像这样也挺好。” 那就是集体的倒退。

2,部分顶流都在享受这几年经济带来的繁荣,却无心解决底层的生存问题。只是到了如今,信息发达了。那些旮旯角落的事情也让不知真相的人知道了真相。社会的主体矛盾自古以来就是利益的分配问题。那你想做一样的事情,却是不同结果。谁也静不下心继续工作。人就会变得浮躁,社会就会变得不稳定。

3,无知的人很多,有些无知的人还掌握了大部分权利。这个是我真的感到万分震惊的。我记得自己看过一部电影叫 “蠢蛋进化论”。里面看到的各种事情,现在的社会都有影子。我觉得这样的事情肯定是有一个无知的人站到了最高层,权力的习惯一般都是从上至下传递的。如今很多政策的一刀切就很能说明问题。下层的人民无知的也挺多,因为群众的眼睛是雪亮的这句话,不是任何场合都适用。所以很容易被带节奏。目前的情况就是底层无知的人对抗上层无知的人,上层无知的人利用高科技去阻挡他们。

4,政府公信力的下降,导致蝴蝶效应的放大。政府如此积极的阻断信息传播,就是为了避免蝴蝶效应。因为信息的传播越快,蝴蝶效应就越明显。但凡有一个站出来把事情处理好的人,去解决问题。事情也不会引起裂变。可是为什么没有,参考第一条。从此看来,其实这届政府已经到了后期。

5,民众不爱国了,准确点是不爱党了。借用网上的一句话 “我爱国,可谁爱我啊!”,颇有点 “不负如来不负卿” 感慨。从小教育我们要爱党,以入党为荣。可是真的需要党来帮助我的时候,换来的是漫长的等待,无尽的嘲讽,没有结果的结果。这个我深有体会,自己也遭遇过类似的事情。

6,抑郁的人群持续增加。我身边都有好几个了。这个病症真的太可怕了。它击碎了人对生活的向往,对未来的希望。我觉得如今的社会环境是导致这个病持续增长的主要原因。大家都在忙于工作,却忽略了身边人的感受与陪伴。导致精神世界分崩离析。

总结:
其实上述现象,全球都存在。貌似人类像来了大姨妈一样,在各个方面发展都放缓了。都在沉浸在互联网的自娱自乐之中。我觉得我们人类该向太空发展,哪怕拟定一个假想敌人也好啊。这样就会有动力去发展科技了。

因为人类自古以来总是当危机自身时,才会迸发前进的动力。

V2ray TProxy 透明代理的小技巧

1,其实一般的正常使用,无需把所有端口都代理进来。如果仅仅是网页翻墙,仅需将 80 443 加入代理即可。配置如下:


#新建路由表

sudo ip route add local default dev lo table 100
sudo ip rule add fwmark 1 lookup 100

#IPv4规则

sudo iptables -t mangle -N V2ray
sudo iptables -t mangle -A V2ray -d 10.0.0.0/8 -j RETURN
sudo iptables -t mangle -A V2ray -d 127.0.0.0/8 -j RETURN
sudo iptables -t mangle -A V2ray -d 169.254.0.0/16 -j RETURN
sudo iptables -t mangle -A V2ray -d 172.16.0.0/12 -j RETURN
sudo iptables -t mangle -A V2ray -d 192.168.2.0/24 -j RETURN
sudo iptables -t mangle -A V2ray -d 224.0.0.0/4 -j RETURN
sudo iptables -t mangle -A V2ray -d 240.0.0.0/4 -j RETURN
sudo iptables -t mangle -A V2ray -d 255.255.255.255/32 -j RETURN

#标记已抓包避免重新路由,造成回环

sudo iptables -t mangle -A V2ray -m mark --mark 0xff -j RETURN

#排除出口的 443 和 80 端口包,避免回环

sudo iptables -t mangle -A V2ray ! -o ppp0 -p tcp --dport 443 -j TPROXY --on-port 1888 --tproxy-mark 1
sudo iptables -t mangle -A V2ray ! -o ppp0 -p tcp --dport 80 -j TPROXY --on-port 1888 --tproxy-mark 1
sudo iptables -t mangle -A PREROUTING ! -i ppp0 -p tcp --dport 443 -j V2ray
sudo iptables -t mangle -A PREROUTING ! -i ppp0 -p tcp --dport 80 -j V2ray

#允许某些地址不被抓包直接通过

sudo iptables -A PREROUTING -d 你的服务器地址/32 -j RETURN
sudo iptables -A PREROUTING -d 192.168.3.0/24 -j RETURN
sudo iptables -A PREROUTING -d 192.168.2.0/24 -j RETURN
sudo iptables -A PREROUTING -d 10.0.0.0/8 -j RETURN
sudo iptables -A PREROUTING -p tcp -m tcp --dport 443 -j V2ray
sudo iptables -A PREROUTING -p tcp -m tcp --dport 80 -j V2ray

#IPv6规则,跟IPv4大部分一样,自行理解

ip -6 rule add fwmark 1 table 106
ip -6 route add local ::/0 dev lo table 106 

sudo ip6tables -t mangle -N V2ray6
sudo ip6tables -t mangle -A V2ray6 -d ::1/128 -j RETURN
sudo ip6tables -t mangle -A V2ray6 -d fe80::/10 -j RETURN
sudo ip6tables -t mangle -A V2ray6 -j RETURN -m mark --mark 0xff
sudo ip6tables -t mangle -A V2ray6 -p tcp ! -o ppp0 --dport 443 -j TPROXY --on-ip ::1 --on-port 1888 --tproxy-mark 1
sudo ip6tables -t mangle -A V2ray6 -p tcp ! -o ppp0 --dport 80 -j TPROXY --on-ip ::1 --on-port 1888 --tproxy-mark 1
sudo ip6tables -t mangle -A PREROUTING -p tcp ! -i ppp0 --dport 443 -j V2ray6
sudo ip6tables -t mangle -A PREROUTING -p tcp ! -i ppp0 --dport 80 -j V2ray6
#标记某些地址直接通过
sudo ip6tables -t mangle -D 你的服务器地址/本机器地址 -j RETURN

2,如果有其他端口,自行添加到 PREROUTING和 V2ray的链表里。虽然麻烦一点,但不会造成一些莫名问题。

cloudfare ddns 更新范本

代码

#!/bin/bash

API_TOKEN="content of API_TOKEN"
ZONE_ID="content of ZONE_ID"
RECORD_ID="content of RECORD_ID"
RECORD_NAME=" content of RECORD_NAME"
 


# Get current public IP
CURRENT_IP=$(curl -s https://api.ipify.org)

# Get the current DNS record IP from Cloudflare
OLD_IP=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
     -H "Authorization: Bearer $API_TOKEN" \
     -H "Content-Type: application/json" \
     | jq -r '.result.content')

# Check if IP has changed
if [ "$CURRENT_IP" != "$OLD_IP" ]; then
    # Update DNS record with new IP
    RESULT=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
         -H "Authorization: Bearer $API_TOKEN" \
         -H "Content-Type: application/json" \
         --data '{"type":"A","name":"'"$RECORD_NAME"'","content":"'"$CURRENT_IP"'","ttl":1,"proxied":false}')

    # Check if update was successful
    if [ "$(echo "$RESULT" | jq -r '.success')" = "true" ]; then
        echo "DNS record updated successfully."
        now points to $CURRENT_IP"
    else
        echo "Error updating DNS record:"
        echo "$RESULT"
        
    fi
fi

服务
/etc/systemd/system/cloudflare-ddns.service

[Unit]
Description=Cloudflare Dynamic DNS Update
After=network-online.target
Wants=cloudflare-ddns.timer

[Service]
User=root
Type=oneshot
ExecStart=/usr/local/bin/cloudflare_ddns.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target
保活
/etc/systemd/system/cloudflare-ddns.timer
[Unit]
Description=Run cloudflare-ddns every 5 minutes

[Timer]
OnBootSec=1m
OnUnitActiveSec=5m

[Install]
WantedBy=timers.target

PDQ inventory and PDQ Deploy license

PDQ Deploy license for 19.3.470

--- START LICENSE ---
PExpY2Vuc2UgVmVyc2lvbj0iMi4wIiBJRD0iMzk5
ODkxZTYtZjYyMS00MDVkLWFlZDctMmZiZTk4MjMw
NzQ5IiBDdXN0b21lcklEPSJkNmU5NWE5ZC00YTVi
LTRjNTctOTQ0Yi1lNjZjM2YxNzI3NDIiIE5hbWU9
IlBEUSBEZXBsb3kiIENvZGU9IlBEUURlcGxveSIg
Q291bnQ9IjY1MDAwIiBNb2RlPSJFbnRlcnByaXNl
IiBUeXBlPSJGdWxsIiBFLU1haWw9ImRldkBib2Fy
ZDRhbGwuYml6IiBFeHBpcmVzPSIyMDk5LTEyLTMx
IiBTaWduYXR1cmU9InBWZzR6eSt6WWtQUU1EcGNC
cWhuelVZenpNSng1alQwcW5jMFhSTjU1TDZTTEFT
YUpaakFwdnFid3ducmJXZUtuMFV0WXZXUC9OUC83
SFZwM1IrZGFIOG5uQ2l3dG5RMjA0eFJ1c3JmVmpM
Qi9QQnFFTjZuWEg3KzlQbnppVTIwRzA3dTdVT1N2
b1BDVERDd3VUUkx6MjFPUzBLKzM2Z2ZFRW1lWlkz
dlo4Zz0iIC8+
--- END LICENSE ---

PDQ inventory license for 19.3.446

--- START LICENSE ---
PExpY2Vuc2UgVmVyc2lvbj0iMi4wIiBJRD0iYjc1
Y2QxZWItOTU4Mi00OGFlLWE0MjMtYjVlZmY2ZTRj
NmM5IiBDdXN0b21lcklEPSJkNGU4ODA3Yy0xNzBj
LTQ4OWEtYjI5Zi0yOGJhYTY5ZDRiYTAiIE5hbWU9
IlBEUSBJbnZlbnRvcnkiIENvZGU9IlBEUUludmVu
dG9yeSIgQ291bnQ9IjY1MDAwIiBNb2RlPSJFbnRl
cnByaXNlIiBUeXBlPSJGdWxsIiBFLU1haWw9ImRl
dkBib2FyZDRhbGwuYml6IiBFeHBpcmVzPSIyMDk5
LTEyLTMxIiBTaWduYXR1cmU9IkZLK2hZZVd6T2VI
ejIvWmk0T3JwbnVIckdZWmVyUURpWkdjYUYvZEV2
SXNrOGFMRHdFY0V0ZVlWbWNIR29udkxtblFNWWl3
SUcwZlNNYUpVNm1KM0xmY05qRVFXMHViTnJobFY0
ZVJ4bEEzd3oyK3JYK3VaMGhldm1hTzdVeUwwL2V1
UU0wZVpybzhyMGVnVkpaVm51dndhMFBkNkRvRUhS
MWdEQjRDYnV6UT0iIC8+
--- END LICENSE ---