menu Chancel's Blog
rss_feed lightbulb_outline

我的笔记

Debian - 休眠设置(无需调整swap分区)

如果在创建Debian操作系统的时候没有勾选需要休眠的话,那么swap分区大小一般为1G,远小于物理内存,休眠所需的swap空间通常略小于实际物理内存

为了确保休眠成功,一般会保证swap分区大小略大于实际物理内存,这个时候我们只需要创建swap分区文件即可

首先,创建一个swap分区文件,并添加开机挂载

sudo fallocate -l 32g /swapfile

sudo mkswap /swapfile

sudo echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab

暂停操作系统使用交换区

sudo sysctl -w vm.swappiness=1 

创建内核变量文件

sudo echo 'vm.swappiness=1'/etc/sysctl.d/ local.conf 

启动操作系统使用交换区

sudo swapon /swapfile

安装uswsusp工具调整休眠,根据前面的操作回答uswsusp工具的问题

sudo apt install uswsusp

sudo dpkg-reconfigure -pmedium uswsusp

设置完成后,查看你的uswsusp.conf配置文件,这是我的配置文件输出,可以使用 swap-offset /swap 校验swapfile文件偏移量是否准确

cat /etc/uswsusp.conf

# /etc/uswsusp.conf(5) -- Configuration file for s2disk/s2both 
resume device = /dev/nvme0n1p2
compress = y
early writeout = y
image size = 2147483647
RSA key file = /etc/uswsusp.key
shutdown method = platform
resume offset = 274432
encrypt = y

运行 update-initramfs -u 使上述所有设置生效,最后使用以下指令可测试休眠是否成功

s2disk

参考资料

Operating System Linux 2021-01-24 22:39:39

Inno Setup - Windows打包程序配置文件指南

Inno Setup是Jordan Russell和Martijn Laan的Windows程序的免费安装程序

Inno Setup is a free installer for Windows programs by Jordan Russell and Martijn Laan. First introduced in 1997, Inno Setup today rivals and even surpasses many commercial installers in feature set and stability.

下面是仅供参考的配置文件,请注意时效性,随着Inno Setup版本更迭配置文件中的部分信息可能失效

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "HelloWorld"
#define MyAppVersion "0.9"
#define MyAppPublisher "chancel's company"
#define MyAppURL "https://www.chancel.ltd/"
#define MyAppExeName "helloworld.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{8435E930-A931-4967-8844-46X547X3BD8D}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={userappdata}\{#MyAppName}
DisableProgramGroupPage=yes
DisableDirPage=no
;安装包的输出目录
OutputDir=D:\inno\output\{#MyAppName}
OutputBaseFilename={#MyAppName}_v{#MyAppVersion}
; 安装包的图标
;SetupIconFile=D:\inno\input\ico\_logo.ico
Compression=lzma
SolidCompression=yes
;此处 限制Windows最低版本为Windows 7
MinVersion=0.0,6.0


[Languages]
;安装语言许选择
Name: "chinesesimplified"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"

[Tasks]
;创建桌面快捷键
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkablealone

[Files]
;打包源文件与要安装的目标文件夹,DestDir需要参考官网文档,有多个枚举可选择
Source: "D:\inno\input\Release\*"; DestDir: "{app}\"; Flags: recursesubdirs ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
;图标选择
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
;程序安装成功后入口执行程序
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

Develop Base 2021-01-20 16:02:28

Supervisor - 配置文件指南

Supervisord 是用 Python 开发的进程管理工具,非常常用于Linux系统,是用户级的Systemd,常见的配置文件如下

[program:myProgram]
directory=/opt/blog/myProgram
command=/usr/local/python3 main.py
autostart=true
autorestart=true
startsecs=10
stdout_logfile=/var/log/supervisor/myProgram-stdout.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=5
stdout_capture_maxbytes=1MB
stderr_logfile=/var/log/supervisor/myProgram-stderr.log
stderr_logfile_maxbytes=10MB
stderr_logfile_backups=5
stderr_capture_maxbytes=1MB
user = chancel
environment = HOME="/home/chancel", USER="chancel"

注解

  • myProgram:程序名称
  • directory:程序运行的起始位置
  • autostart:自启动(在supervisor启动之后自启动)
  • environment:针对一些需要特殊变量环境的程序设置启动时的变量环境

Software Tools Linux 2021-01-20 15:35:06

Python3 - python-markdown2 代码颜色渲染

python-markdown2是Python一个将Markdown文本翻译成HTML文档的第三方库,仓库传送门:trentm/python-markdown2

Markdown is a light text markup format and a processor to convert that to HTML.

访问文档的扩展插件部分说明页面(Extras provided by markdown2.py

可以看code-color扩展插件部分,按照作者的说法,这部分已经在1.3.0版本之后废弃不用了,改用 fenced-code-blocks扩展插件

使用扩展插件方法,只需要在执行转换的方法时候添加扩展插件参数

import markdown2

markdown_extras = ['fenced-code-blocks']
html_content = markdown2.markdown(article_content.a_content, extras=g.markdown_extras)

可以看到生成的 html_content文档的div节点class属性是codehilite,其子元素的class也标记上了

最后一步我们只需要引入pygments-css的CSS文件,将引入的CSS文件class类名从highlight 修改成 codehilite,就可以将代码颜色渲染了

Develop Technology Python 2021-01-20 15:23:42

MariaDB - "'Access denied for user 'root'@'localhost"

安装的MariaDB登录root账户

chancel@ubuntu1804-server:~$ mysql -uroot -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

chancel@ubuntu1804-server:~$ mysql -V
mysql  Ver 15.1 Distrib 10.1.47-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

登录失败,确认过Root的密码没有错,使用 sudo mysql -p可以登录,确认是Root用户不允许使用密码登录

参考ERROR 1698 (28000): Access denied for user 'root'@'localhost'解决方案一,可以设置root用户允许使用密码登录

chancel@ubuntu1804-server:~$ sudo mysql -u root

MariaDB [(none)]> USE mysql;
MariaDB [mysql]> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
MariaDB [mysql]> FLUSH PRIVILEGES;
MariaDB [mysql]> exit;

再次尝试,可以使用密码登录root账户

Develop Base Database 2021-01-19 11:48:54

Python3 - 复制文件到别的文件夹下

Python3复制文件

import os
import shutil

def copy_file(src_file_path:str,target_file_path:str):
    if not os.path.isfile(src_file_path):
        return False
    file_path=os.path.split(target_file_path)[0]
    if not os.path.exists(file_path):
        os.makedirs(file_path)            
    shutil.copyfile(src_file_path,target_file_path)  

if __name__ == '__main__':
    copy_file('C:\\A\\fuck.txt','c:\\B\\fuck.txt')

Develop Technology Python 2021-01-18 14:56:14

Python3 - 递归获取目录下的所有文件(含子目录内文件)

Python3递归获取目录下的所有文件(含子目录内文件)

测试版本:Python3.6.9

import os

def get_list_by_folder(path):
    list_name = []
    for file in os.listdir(path):
        file_path = os.path.join(path, file)
        if not os.path.isdir(file_path):
            list_name.append(file_path)
        else:
            list_name.extend(GetListByFolder(file_path))
    return list_name

if __name__=='__main__':
    file_list = get_list_by_folder("./")
    print(file_list)

Develop Technology Python 2021-01-18 14:48:07

SSH - 反向代理(SSH隧道)方法

假设有2台主机A和B,目标是实现A机器的8080端口转发到B机器的9090端口

首先编辑A主机的 /etc/ssh/sshd_config,将GatewayPorts注释(#符号)去掉,值修改为yes

sudo vim /etc/ssh/sshd_config

...
#GatewayPorts no
...

重启A主机的ssh服务并启动转发

sudo systemctl restart sshd
sudo ssh -NfR 8080:9090 [B机器用户名]@[B机器IP]

按上述操作后,则在任何外网机器访问A主机的8080端口,最终都会被转发到B主机的80端口上

此外可以参考针对SSH转发优化的 SSH TUNNELLING FOR FUN AND PROFIT: AUTOSSH

Network Linux 2021-01-18 14:23:13

Ubuntu1804 - 安装Python版本快速指南

首先准备安装环境

# 编译依赖项目
sudo apt install libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev zlib1g-dev make gcc

# 用于编译过程的缓存文件夹
mkdir /tmp/python3/
cd /tmp/python3/

在Python官网选择合适的安装包,我这里选择的是Python3.7版本(下载地址)

https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz

下载并解压

wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz
tar -zxvf Python-3.7.1
cd Python-3.7.1

选择安装目录并编译,我这里选择安装在 /usr/local/python3.7

./configure --prefix=/usr/local/python3.7
sudo make
sudo make install

最后,如有需要请添加到系统环境中(Path)中

sudo ln -s /usr/local/python3.7/bin/python3 /usr/bin/python3.7

Operating System Linux 2021-01-08 10:46:14

Python - ConfigParser 键值大小写转换

在Windows中,INI文件默认不区别大小写,所以ConfigParser在读取INI文件时将丢失大小写信息

这一点,在文末的官方附录上有说明,修改也非常简单,ConfigParser允许传递一个返回字符串函数作为替换自带的解析字符串函数

to a function that takes a string argument and returns a string

实际例子如下

app_config_parser = ConfigParser()
app_config_parser.optionxform = str

参考资料

Develop Technology Python 2020-11-16 04:10:45

3 of 11 | A total of 110