作者: iuu

Debian和 Ubuntu下将Python程序打包成.deb安装包

查看python版本

it0@it0-pc:~/桌面/tests/testdeb$ python3 -V
Python 3.8.10

查看pip版本

it0@it0-pc:~/桌面/tests/testdeb$ pip3 -V
pip 24.1.2 from /usr/local/lib/python3.8/dist-packages/pip (python 3.8)

将工程打包生成一个可执行文件

注意一定要保证python程序在电脑上可以正常运行!!!!!!!
该安装第三方库的安装库,该安装扩展的安装扩展!!!!!!!

python3 main.py

当前项目目录结构

.
├── config
├── DB
├── horizontalSliderUI.py
├── icons
├── main.py
├── ui
└── utils

安装pyinstaller

pip3 install pyinstaller

检查pyinstaller安装成功

pyinstaller -v

在python代码项目目录执行以下命令

pyinstaller -F -w main.py
# 可以通过pyinstaller --help查看帮助

此时项目结构 (产生了build、dist、main.spec)文件和文件夹

.
├── build
├── config
├── DB
├── dist
├── horizontalSliderUI.py
├── icons
├── main.py
├── main.spec
├── ui
└── utils

dist目录中的main文件就是编译好的二进制文件。
此时从其他地方新建目录testa把二进制移动到该目录
此时testa目录结构为:

.
└── main

把程序的依赖配置目录啥的都放到testa目录下(此处为testa示例 根据自己实际情况来)

.
├── DB
│   ├── log
│   │   └── log.txt
│   └── user_DB.db
└── main

此时终端到testa目录下执行./main文件测试程序是否可以正常启动,如有问题就看终端上的报错,没有问题则进行下一步。

把可执行程序和依赖文件打包成.deb文件

在其他位置新建makedeb目录,然后按照以下结构创建目录结构,以下是我makedeb目录下的结构

├── DEBIAN
└── usr
    ├── lib
    └── share
        ├── applications
        └── icons

将testa目录直接移动到lib目录下

├── DEBIAN
└── usr
    ├── lib
    │   └── testa
    │       ├── DB
    │       │   ├── log
    │       │   │   └── log.txt
    │       │   └── user_DB.db
    │       └── main
    └── share
        ├── applications
        └── icons

到DEBIAN目录新增control文件,内容如下(自行百度含义):

Package: debpacktest
Version: 1.0.0
Architecture: arm64
Maintainer: gao
Description: just a test

在/usr/share/applications下制作桌面图标 testa.desktop文件

[Desktop Entry]
Name=debpacktest
Comment=An example
Exec=/usr/lib/testa/m/main #可执行文件路径
Icon=/usr/share/icons/icc.ico #图标路径
Terminal=false #是否运行同时打开终端
Type=Application
X-Ubuntu-Touch=true
Categories=Development

为这个文件添加可执行权限

chmod +x testa.desktop

在/usr/share/icons/文件夹下放icc.ico图标(图标名自定义跟上边配置呼应)
此时makedeb的目录结构如下:

├── DEBIAN
│   └── control
└── usr
    ├── lib
    │   └── testa
    │       ├── DB
    │       │   ├── log
    │       │   │   └── log.txt
    │       │   └── user_DB.db
    │       └── main
    └── share
        ├── applications
        │   └── testa.desktop
        └── icons
            └── icc.ico

到这里,一个基本的deb软件包就大功告成了。
我们返回到makedeb的上级目录。我们执行

sudo dpkg -b makedeb makedeb_1.0.0_arm64.deb

包的命名要符合规范,我这里是随便打的。
检验的话,可以输入(安装deb包)

sudo dpkg -i makedeb_1.0.0_arm64.deb

我在应用列表里看到了我的程序
如果要卸载,请执行

sudo dpkg -r makedeb

参考链接
https://blog.csdn.net/u013541325/article/details/114954959
https://blog.csdn.net/qq_43790749/article/details/118027929

网络安全问题任重道远

从资产测绘到拿到超级管理员用户5个小时解决战斗

或许是我运气好误打误撞

通过hook eval解密混淆的PHP文件文件

PHP混淆原理

一般来讲,混淆分为两种

利用拓展进行加密

比如 SG11、Swoole Compiler 等

不需要拓展,单文件加密

本文主要针对第二种,而单文件加密的一般都是对源码进行字符串操作,比如对字符串移位、拼接,或者重新定义变量,重新赋值数组,总之就是尽可能减少程序可读性。但是所有加密过的代码都会经过多次eval来重新还原为php代码执行,所以我们可以hook PHP中的eval函数来输出经过eval函数的参数,参数就是源码。

hook eval

PHP中的eval函数在Zend里需要调用zend_compile_string函数,我们写一个拓展直接hook这个函数就行了。不过我不会写c代码,所以参考网上的文章,在GitHub中找到了现成的一个拓展库。
https://github.com/bizonix/evalhook/tree/master
安装扩展之后终端执行

php xxx.php

即可打印出解析后的PHP代码 注意变量名无法被还原
参考链接 https://y4er.com/posts/hook-eval/

CentOS 7.9 更新CURL到最新稳定版的方法

在安装swoole5.1版本的时候遇到centos7.9 curl版本过低问题,导致无法安装swoole扩展
下边是详细解决办法

添加一个新的repo

vim /etc/yum.repos.d/city-fan.repo

然后在里面添加如下内容:

Centos6 编辑为如下:

[CityFanforCurl]
name=City Fan Repo
baseurl=http://www.city-fan.org/ftp/contrib/yum-repo/rhel6/x86_64/
enabled=0
gpgcheck=0

Centos7 编辑为如下:

[CityFanforCurl]
name=City Fan Repo
baseurl=http://www.city-fan.org/ftp/contrib/yum-repo/rhel7/x86_64/
enabled=0
gpgcheck=0

更新 cURL 直接使用如下命令进行更新:

yum update curl --enablerepo=CityFanforCurl -y

cURL将会更新到一个最新的稳定版。

查看curl 版本信息

curl --version

Kubernetes简单概述

Kubernetes (k8s) 由多个组件组成,这些组件协同工作以提供一个强大的容器编排平台。常见的 Kubernetes 组件:

主节点组件 (Master Node Components)

API Server:

负责接收和处理来自用户、工具和其他 Kubernetes 组件的 REST 操作请求。它是 Kubernetes 控制平面的入口。

etcd:

一个分布式键值存储,用于存储 Kubernetes 集群的所有数据,包括集群的配置信息和状态数据。

Controller Manager:

负责执行集群中的控制循环,确保集群的实际状态符合预期状态。常见的控制器包括节点控制器、复制控制器、端点控制器等。

Scheduler:

负责将待调度的 Pod 分配到合适的节点上。它考虑各种调度策略、资源需求、节点的健康状况等因素。

工作节点组件 (Node Components)

kubelet:

运行在每个节点上的代理,负责与 API Server 通信,管理该节点上的 Pod 和容器。kubelet 接收 Pod 规格并确保容器按要求运行。

kube-proxy:

负责维护网络规则,允许 Kubernetes 服务之间的网络通信。它实现了服务的负载均衡。

Container Runtime:

负责运行容器的实际软件,可以是 Docker、containerd、CRI-O 等。

附加组件 (Additional Components)

Dashboard:

一个基于 Web 的 Kubernetes 用户界面,用于查看集群状态和管理资源。

DNS:

Kubernetes 提供内部 DNS 服务,用于为其他 Kubernetes 服务创建 DNS 记录,使服务之间可以通过 DNS 名称相互访问。

Ingress Controller:

管理 Ingress 资源,提供 HTTP 和 HTTPS 路由功能,将外部流量引导到集群内的服务。

Prometheus 和 Grafana:

用于监控和可视化集群状态。Prometheus 收集指标数据,Grafana 用于展示这些数据。

Helm:

Kubernetes 的包管理工具,用于简化应用的安装和管理。

这些组件共同协作,使得 Kubernetes 能够高效地管理和编排容器化应用。了解这些组件及其功能,可以更好地管理和运维 Kubernetes 集群。

1 7 8 9 10 11 16