mirror of
https://github.com/fruworg/fruworg.github.io.git
synced 2025-07-01 23:43:59 +03:00
Compare commits
60 Commits
913fc2a56f
...
main
Author | SHA1 | Date | |
---|---|---|---|
370f54e777 | |||
b4f5bae528 | |||
efdcf3f7e9 | |||
5b3c07daf2 | |||
e9058cf463 | |||
89872c6db8 | |||
62d3c4c8f9 | |||
5a560e49f1 | |||
75286baade | |||
5dc75e981e | |||
db099bde71 | |||
4c18587000 | |||
e12e35070c | |||
f93bd04659 | |||
2839b56ed4 | |||
8055a8e019 | |||
afbbb240ef | |||
01cb4bba16 | |||
843a9df5ac | |||
30562fd47a | |||
679383ab46 | |||
c3fd5815a5 | |||
8cbbeedd2b | |||
a2ad64266a | |||
1917099f70 | |||
69fe73f4e2 | |||
044e95c4f4 | |||
1a813268c0 | |||
566646b9e7 | |||
ffae9f59e4 | |||
14ab9aaca8 | |||
a0779bf03b | |||
dcef7fcb06 | |||
7308b88594 | |||
976135d17e | |||
52a2785251 | |||
ebdd2bbed7 | |||
ccbe7d251f | |||
77548ad0a3 | |||
4c7d8fa703 | |||
59e403ff61 | |||
065c517ba4 | |||
fded74c558 | |||
2b22134d1f | |||
1a4cfe4b23 | |||
d016387976 | |||
059c24ef6f | |||
751d0edc3f | |||
f82e30c1ff | |||
44c7c2a210 | |||
d2c595f724 | |||
cae767240c | |||
dfbf0fd7bd | |||
be08d99f96 | |||
d0c48765cd | |||
60acdc72cc | |||
5429fe9431 | |||
53c9288161 | |||
45ecaf391b | |||
2791a8cfb8 |
24
.github/workflows/hugo.yml
vendored
24
.github/workflows/hugo.yml
vendored
@ -1,10 +1,11 @@
|
||||
# Sample workflow for building and deploying a Hugo site to GitHub Pages
|
||||
name: Deploy Hugo site to Pages & Neocities
|
||||
name: Deploy Hugo site to Pages
|
||||
|
||||
on:
|
||||
# Runs on pushes targeting the default branch
|
||||
push:
|
||||
branches: ["main"]
|
||||
branches:
|
||||
- main
|
||||
|
||||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
@ -31,7 +32,7 @@ jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
HUGO_VERSION: 0.119.0
|
||||
HUGO_VERSION: 0.141.0
|
||||
steps:
|
||||
- name: Install Hugo CLI
|
||||
run: |
|
||||
@ -40,28 +41,31 @@ jobs:
|
||||
- name: Install Dart Sass
|
||||
run: sudo snap install dart-sass
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
fetch-depth: 0
|
||||
- name: Setup Pages
|
||||
id: pages
|
||||
uses: actions/configure-pages@v3
|
||||
uses: actions/configure-pages@v5
|
||||
- name: Install Node.js dependencies
|
||||
run: "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true"
|
||||
- name: Build with Hugo
|
||||
env:
|
||||
# For maximum backward compatibility with Hugo modules
|
||||
HUGO_CACHEDIR: ${{ runner.temp }}/hugo_cache
|
||||
HUGO_ENVIRONMENT: production
|
||||
HUGO_ENV: production
|
||||
TZ: America/Los_Angeles
|
||||
run: |
|
||||
hugo \
|
||||
--gc \
|
||||
--minify \
|
||||
--baseURL "${{ steps.pages.outputs.base_url }}/"
|
||||
- name: Change color
|
||||
run: sed -i 's/peachpuff/rebeccapurple/g' public/css/main.*.css
|
||||
- name: Change URI
|
||||
run: find public -type f -exec sed -i 's/\/\/fruw.org/\/\/fruworg.github.io/g' {} +
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-pages-artifact@v2
|
||||
uses: actions/upload-pages-artifact@v3
|
||||
with:
|
||||
path: ./public
|
||||
|
||||
@ -75,7 +79,7 @@ jobs:
|
||||
steps:
|
||||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v2
|
||||
uses: actions/deploy-pages@v4
|
||||
|
||||
deploy-neocities:
|
||||
environment:
|
||||
@ -84,7 +88,7 @@ jobs:
|
||||
needs: build
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/download-artifact@v3
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
path: .
|
||||
- name: Create directory
|
||||
|
22
config.toml
22
config.toml
@ -8,7 +8,7 @@ theme = "themu"
|
||||
pygmentsstyle = "fruity"
|
||||
pygmentscodefences = true
|
||||
pygmentscodefencesguesssyntax = true
|
||||
paginate = 4
|
||||
pagination.pagerSize = 4
|
||||
|
||||
[params]
|
||||
description = "всем привет!"
|
||||
@ -32,7 +32,7 @@ name = "pgp"
|
||||
url = "//keys.openpgp.org/pks/lookup?op=get&options=mr&search=im@fruw.org"
|
||||
|
||||
[[params.social]]
|
||||
name = "keyoxide"
|
||||
name = "id"
|
||||
url = "//keyoxide.org/86a5f8191783e6f1"
|
||||
|
||||
[[params.social]]
|
||||
@ -43,6 +43,10 @@ url = "//up.fruw.org"
|
||||
name = "git"
|
||||
url = "//github.com/fruworg"
|
||||
|
||||
[[params.social]]
|
||||
name = "steam"
|
||||
url = "//steamcommunity.com/id/fruworg"
|
||||
|
||||
[[params.social]]
|
||||
name = "x"
|
||||
url = "//x.com/fruworg"
|
||||
@ -63,6 +67,16 @@ url = "/index.xml"
|
||||
weight = 3
|
||||
|
||||
[[menu.main]]
|
||||
name = "webring"
|
||||
url = "/webring.html"
|
||||
name = "dn42"
|
||||
url = "https://f.dn42"
|
||||
weight = 4
|
||||
|
||||
[[menu.main]]
|
||||
name = "i2p"
|
||||
url = "http://f.i2p"
|
||||
weight = 5
|
||||
|
||||
[[menu.main]]
|
||||
name = "tor"
|
||||
url = "http://fruworgtuaajxcxdcygjybaeon7oid4ibkaugotfavucjs4i7zbrrnad.onion"
|
||||
weight = 6
|
||||
|
@ -8,7 +8,7 @@ tags: [linux, astra, krb5]
|
||||
|
||||
В файл `/etc/hosts` необходимо добавить ip и fqdn DC:
|
||||
|
||||
```config
|
||||
```python
|
||||
<dc-ip> <dc-name>.<domain> <dc-name>
|
||||
```
|
||||
|
||||
@ -21,7 +21,7 @@ hostnamectl set-hostname <dc-name>.<domain>
|
||||
|
||||
В файл `/etc/apt/sources.list.d/aldpro.list` необходимо добавить репозиторий ALD Pro:
|
||||
|
||||
```config
|
||||
```python
|
||||
deb https://download.astralinux.ru/aldpro/stable/repository-main/ 1.0.0 main
|
||||
deb https://download.astralinux.ru/aldpro/stable/repository-extended/ generic main
|
||||
```
|
||||
@ -30,7 +30,7 @@ deb https://download.astralinux.ru/aldpro/stable/repository-extended/ generic ma
|
||||
|
||||
В файле `/etc/apt/preferences.d/aldpro` необходимо выставить приоритет репозиториев:
|
||||
|
||||
```config
|
||||
```python
|
||||
Package: *
|
||||
Pin: release n=generic
|
||||
Pin-Priority: 900
|
||||
|
@ -9,7 +9,7 @@ tags: [linux, astra, krb5, freeipa]
|
||||
### Создания сетевой видимости
|
||||
На клиенте и DC необходимо в файл `/etc/hosts` добавить оба ip и fqdn:
|
||||
|
||||
```config
|
||||
```python
|
||||
<server-ip> <server-name>.<domain> <server-name>
|
||||
<client-ip> <client-name>.<domain> <client-name>
|
||||
```
|
||||
|
46
content/posts/autohotkey.md
Normal file
46
content/posts/autohotkey.md
Normal file
@ -0,0 +1,46 @@
|
||||
---
|
||||
title: Полезные бинды клавиш в Windows
|
||||
description: AutoHotkey v2
|
||||
date: 2025-01-14T11:36:00+01:00
|
||||
tags: [windows]
|
||||
---
|
||||
|
||||
## Вступление
|
||||
Для бинда клавиш я использую [AutoHotkey](https://www.autohotkey.com/download/ahk-v2.exe). Для автозапуска нужно перенести `.ahk` файлы в `shell:startup`.
|
||||
|
||||
## CapLang.ahk
|
||||
Смена раскладки по нажатию на `CapsLock`. Сам `CapsLock` переключается через `Shift+CapsLock`.
|
||||
|
||||
```python
|
||||
SendMode("Input")
|
||||
SetWorkingDir A_ScriptDir
|
||||
+CapsLock::SetCapsLockState !GetKeyState("CapsLock", "T")
|
||||
CapsLock::Send "{Alt Down}{Shift Down}{Shift Up}{Alt Up}"
|
||||
```
|
||||
|
||||
## Kitty.ahk
|
||||
Запуск Kitty по нажатию на кнопку `Copilot`.
|
||||
|
||||
```python
|
||||
SendMode("Input")
|
||||
SetWorkingDir A_ScriptDir
|
||||
+#f23:: Run "C:\Program Files\Kitty\kitty.exe -load <your-profile-name>"
|
||||
```
|
||||
|
||||
## WSL.ahk
|
||||
Запуск WSL по нажатию на `Ctrl+Alt+T`
|
||||
|
||||
```python
|
||||
SendMode("Input")
|
||||
SetWorkingDir A_ScriptDir
|
||||
<^<!t::Run 'powershell.exe -noexit -command "cd <wsl-home-dir>; wsl"'
|
||||
```
|
||||
|
||||
## PrintScreen.ahk
|
||||
Скриншот нажатием на правый альт.
|
||||
|
||||
```python
|
||||
SendMode("Input")
|
||||
SetWorkingDir A_ScriptDir
|
||||
RAlt::PrintScreen
|
||||
```
|
@ -37,7 +37,7 @@ exit
|
||||
### Бэкап определённой папки
|
||||
В файл `/etc/bareos/bareos-dir.d/fileset/<name>.conf` необходимо добавить настройку бэкапа определённой папки:
|
||||
|
||||
```config
|
||||
```python
|
||||
FileSet {
|
||||
Name = "<name>"
|
||||
Description = "<description>"
|
||||
|
68
content/posts/cephfs.md
Normal file
68
content/posts/cephfs.md
Normal file
@ -0,0 +1,68 @@
|
||||
---
|
||||
title: Создание CephFS
|
||||
description: Конфигурация и автомонтирование
|
||||
date: 2025-05-30T15:35:00+02:00
|
||||
tags: [linux, ceph]
|
||||
---
|
||||
## Создание FS / Сервер
|
||||
|
||||
### Создание пула данных и меты
|
||||
|
||||
```bash
|
||||
ceph osd pool create <fs-name>_data
|
||||
ceph osd pool create <fs-name>_meta
|
||||
ceph osd pool set <fs-name>_data bulk true
|
||||
```
|
||||
|
||||
### Создание FS
|
||||
|
||||
```bash
|
||||
ceph fs new <fs-name> <fs-name>_meta <fs-name>_data
|
||||
```
|
||||
|
||||
### Создание пользователя
|
||||
|
||||
`r` - чтение\
|
||||
`w` - запсись\
|
||||
`s` - снапшоты\
|
||||
`p` - аттрибуты
|
||||
|
||||
```bash
|
||||
ceph fs authorize <fs-name> client.<user> / rwsp
|
||||
```
|
||||
|
||||
## Подключение FS / Клиент
|
||||
|
||||
### Установка необходимых пакетов
|
||||
|
||||
```shell
|
||||
apt install ceph-common attr
|
||||
```
|
||||
|
||||
### Создание директории для монтирования FS
|
||||
|
||||
```bash
|
||||
mkdir /mnt/cephfs-<fs-name>
|
||||
```
|
||||
|
||||
### Конфиг файлы
|
||||
|
||||
Файл `/etc/ceph/ceph.conf` необходимо скопировать с сервера на клиент.\
|
||||
В файл `/etc/ceph/ceph.client.<user>.keyring` необходимо вставить вывод команды создания клиента.\
|
||||
В файл `/etc/fstab` необходимо вставить следующее:
|
||||
|
||||
```python
|
||||
<ceph-cluster.doma.in>:6789:/ /mnt/cephfs-<fs-name> ceph name=<user>,fs=<fs-name>,noatime,_netdev
|
||||
```
|
||||
|
||||
### Монтирование
|
||||
|
||||
```shell
|
||||
mount -a
|
||||
```
|
||||
|
||||
### Указание размера директории
|
||||
|
||||
```shell
|
||||
setfattr -n ceph.quota.max_bytes -v <size-in-gb>G /mnt/cephfs-<fs-name>
|
||||
```
|
@ -12,7 +12,7 @@ apt install cifs-utils -y
|
||||
## Создание файла с данными УЗ
|
||||
В файл `/root/.smbuser` необходимо добавить данные УЗ для подключения к шаре:
|
||||
|
||||
```config
|
||||
```python
|
||||
username=<username>
|
||||
password=<password>
|
||||
domain=<domain>
|
||||
@ -25,7 +25,7 @@ sudo chmod 0400 /root/.smbuser
|
||||
|
||||
## Развёртывание
|
||||
В `/etc/fstab` необходимо добавить строку подключения к шаре:
|
||||
```config
|
||||
```python
|
||||
//<address> /<folder> cifs credentials=/root/.smbuser,uid=<uid>,gid=<gid> 0 0
|
||||
```
|
||||
|
||||
|
@ -8,7 +8,7 @@ tags: [linux]
|
||||
Неприятно, когда конфиг не даёт поменять себя ручками, да?
|
||||
В `/etc/dhcp/dhclient.conf` необходимо добавить строки перезаписи:
|
||||
|
||||
```config
|
||||
```python
|
||||
supersede domain-name-servers <dns-1>, <dns-n>;
|
||||
supersede domain-name "<domain.local>";
|
||||
```
|
||||
|
36
content/posts/dnssec-coredns.md
Normal file
36
content/posts/dnssec-coredns.md
Normal file
@ -0,0 +1,36 @@
|
||||
---
|
||||
title: Конфигурация DNSSEC
|
||||
description: CoreDNS
|
||||
date: 2025-06-25T13:36:00+02:00
|
||||
tags: [linux, coredns]
|
||||
---
|
||||
## Генерация ключа
|
||||
|
||||
```bash
|
||||
dnssec-keygen -a ECDSAP256SHA256 <doma.in>
|
||||
```
|
||||
|
||||
## Конфигурация CoreDNS
|
||||
|
||||
В `Corefile` доменной зоны необходимо вставить следующее:
|
||||
|
||||
```python
|
||||
dnssec {
|
||||
key file /etc/coredns/dnssec/<filename-without-extension>
|
||||
}
|
||||
```
|
||||
|
||||
И перезапустить `CoreDNS` командой:
|
||||
|
||||
```shell
|
||||
systemctl restart coredns
|
||||
```
|
||||
|
||||
## DS-запись
|
||||
|
||||
Далее необходимо добавить `DS-запись` в консоль регистратора.\
|
||||
Запись можно получить выполнив следующую команду:
|
||||
|
||||
```bash
|
||||
dnssec-dsfromkey <filename-without-extension>
|
||||
```
|
@ -14,7 +14,7 @@ tags: [linux, caddy]
|
||||
### Caddy
|
||||
|
||||
В Caddyfile необходимо добавить секцию с поддоменом для обновления whitelist (необходимо заменить [строку basic auth](//caddyserver.com/docs/caddyfile/directives/basicauth)):
|
||||
```config
|
||||
```python
|
||||
wh.<your.domain> {
|
||||
@block {
|
||||
not client_ip {$WHITE_LIST}
|
||||
@ -32,7 +32,7 @@ wh.<your.domain> {
|
||||
```
|
||||
|
||||
Пример поддомена, доступ до которого разрешён только с IP из whitelist:
|
||||
```config
|
||||
```python
|
||||
sub.<your.domain> {
|
||||
@block {
|
||||
not client_ip {$WHITE_LIST}
|
||||
@ -45,7 +45,7 @@ sub.<your.domain> {
|
||||
```
|
||||
|
||||
В `caddy.service` необходимо добавить следующую строку в секцию `[Service]`:
|
||||
```config
|
||||
```python
|
||||
Environment="WHITE_LIST=127.0.0.1/8"
|
||||
```
|
||||
|
||||
|
71
content/posts/i2p-website.md
Normal file
71
content/posts/i2p-website.md
Normal file
@ -0,0 +1,71 @@
|
||||
---
|
||||
title: Поднятие сайта в i2p
|
||||
description: Caddy + i2pd
|
||||
date: 2025-06-25T14:10:00+02:00
|
||||
tags: [linux, i2p, caddy]
|
||||
---
|
||||
## Установка i2pd
|
||||
|
||||
```shell
|
||||
apt -y install -y apt-transport-https
|
||||
wget -qO - https://repo.i2pd.xyz/.help/add_repo | bash -s -
|
||||
apt update
|
||||
apt -y install i2pd
|
||||
```
|
||||
|
||||
## Конфигурация i2pd
|
||||
|
||||
В `/etc/i2pd/tunnels.conf.d/website.conf` необходимо добавить следующее:
|
||||
|
||||
```python
|
||||
[website]
|
||||
type = http
|
||||
host = 127.0.0.1
|
||||
port = 80
|
||||
keys = website.dat
|
||||
```
|
||||
|
||||
И перезагрузите i2pd:
|
||||
|
||||
```shell
|
||||
systemctl restart i2pd
|
||||
```
|
||||
|
||||
## Регистрация адреса
|
||||
|
||||
В `reg.i2p` необходимо проверить незанятость желаемого `fqdn`.\
|
||||
Если `fqdn` занят, но не используется, то его тоже можно занять.\
|
||||
Для регистрации необходимо сгенерировать подпись:
|
||||
|
||||
```shell
|
||||
git clone --recursive https://github.com/purplei2p/i2pd-tools
|
||||
cd i2pd-tools
|
||||
./dependencies.sh
|
||||
make
|
||||
```
|
||||
|
||||
```shell
|
||||
./regaddr /var/lib/i2pd/website.dat <domain>.i2p
|
||||
```
|
||||
|
||||
Полученный вывод необходимо вписать в страницу желаемого домена на `reg.i2p`.
|
||||
|
||||
## Конфигурация Caddy
|
||||
|
||||
Полный `b32` домен можно посмотреть командой:
|
||||
|
||||
```shell
|
||||
ls /var/lib/i2pd/destinations
|
||||
```
|
||||
|
||||
В `Caddyfile` необходимо добавить следующее:
|
||||
|
||||
```python
|
||||
http://<domain>.i2p {
|
||||
respond "i2p"
|
||||
}
|
||||
|
||||
http://<b32-domain-before-dots>.b32.i2p {
|
||||
redir http://<domain>.i2p{uri}
|
||||
}
|
||||
```
|
29
content/posts/linux-disk-resize.md
Normal file
29
content/posts/linux-disk-resize.md
Normal file
@ -0,0 +1,29 @@
|
||||
---
|
||||
title: Ресайз диска
|
||||
description: ext4
|
||||
date: 2024-12-10T13:57:00+01:00
|
||||
tags: [linux]
|
||||
---
|
||||
## Расширение раздела
|
||||
|
||||
`<disk>` - sda \
|
||||
`<partition>` - 1
|
||||
|
||||
```shell
|
||||
growpart /dev/<disk> <partition>
|
||||
```
|
||||
|
||||
## Увеличение ФС
|
||||
|
||||
`<partition>` - sda1
|
||||
|
||||
```shell
|
||||
resize2fs /dev/<partition>
|
||||
```
|
||||
## Очистка логов
|
||||
|
||||
Если совсем нет места для выполнения команд
|
||||
|
||||
```shell
|
||||
journalctl --vacuum-time=1d
|
||||
```
|
@ -33,7 +33,7 @@ hostnamectl set-hostname <hostname>
|
||||
### Правка файла hosts
|
||||
|
||||
Вместо правки файла `/etc/hosts` можно поднять DNS-сервер и сделать записи там.
|
||||
```config
|
||||
```python
|
||||
<server-ip> <server-name.domain.name> <server-name>
|
||||
<client-ip> <client-name.domain.name> <client-name>
|
||||
```
|
||||
@ -41,7 +41,7 @@ hostnamectl set-hostname <hostname>
|
||||
### Редактирование конфига Kerberos
|
||||
|
||||
В `/etc/krb5.conf` необходимо добавить данные а реалме и kdc:
|
||||
```config
|
||||
```python
|
||||
[libdefaults]
|
||||
default_realm = <DOMAIN.NAME>
|
||||
|
||||
@ -77,7 +77,7 @@ quit
|
||||
### Разрешение административных прав
|
||||
Добавляем администратора в `/etc/krb5kdc/kadm5.acl`:
|
||||
|
||||
```config
|
||||
```python
|
||||
<admin-name>/admin
|
||||
```
|
||||
|
||||
|
@ -23,7 +23,7 @@ chmod 777 /nfs
|
||||
|
||||
В файл `/etc/exports` необходимо добавить следующую строку:
|
||||
|
||||
```config
|
||||
```python
|
||||
/nfs <client-ip>(rw,sync,no_root_squash,no_subtree_check)
|
||||
```
|
||||
|
||||
|
28
content/posts/pgp-commands.md
Normal file
28
content/posts/pgp-commands.md
Normal file
@ -0,0 +1,28 @@
|
||||
---
|
||||
title: Памятка по PGP/GPG
|
||||
description: gnupg - export, import and renew
|
||||
date: 2025-01-12T22:00:00+01:00
|
||||
tags: [linux, pgp]
|
||||
---
|
||||
## Экспорт
|
||||
|
||||
```bash
|
||||
gpg -a --export-secret-keys > private.asc
|
||||
gpg --export-ownertrust > trust.txt
|
||||
```
|
||||
|
||||
## Импорт
|
||||
|
||||
```bash
|
||||
gpg --import private.asc
|
||||
gpg --import public.asc
|
||||
gpg --import-ownertrust trust.txt
|
||||
```
|
||||
|
||||
## Продление
|
||||
|
||||
```bash
|
||||
gpg --list-keys
|
||||
gpg --quick-set-expire <fingerprint> 1y '*'
|
||||
gpg --export <your@ema.il> | curl -T - https://keys.openpgp.org
|
||||
```
|
@ -47,7 +47,7 @@ q
|
||||
### Изменение конфигруационного файла Postgres Pro
|
||||
В файл `/var/lib/pgpro/std-*/data/postgresql.conf` необходимо добавить следующие строки:
|
||||
|
||||
```config
|
||||
```python
|
||||
krb_server_keyfile = 'postgres.keytab'
|
||||
listen_addresses = 'localhost, <pg-ip>'
|
||||
```
|
||||
@ -55,7 +55,7 @@ listen_addresses = 'localhost, <pg-ip>'
|
||||
### Разрешение подключения
|
||||
В файл `/var/lib/pgpro/std-*/data/pg_hba.conf` необходимо добавить следующие строки:
|
||||
|
||||
```config
|
||||
```python
|
||||
hostgssenc all postgres localhost/32 gss include_realm=0
|
||||
hostgssenc <database> <username> <client-ip>/32 gss include_realm=0
|
||||
```
|
||||
|
@ -24,7 +24,7 @@ apt install ldap-utils -y
|
||||
|
||||
В файл `/etc/ldap/ldap.conf` необходимо добавить следующие строки:
|
||||
|
||||
```config
|
||||
```python
|
||||
TLS_CACERT /etc/ldap/<ad>.pem
|
||||
BASE dc=<domain>,dc=<local>
|
||||
URI ldaps://<dc>.<domain>.<local>:636
|
||||
@ -39,7 +39,7 @@ ldapsearch -x -b "dc=<domain>,dc=<local>" -H ldaps://<dc>.<domain>.<local>:636 -
|
||||
## Правка pg_hba.conf
|
||||
|
||||
С ldapprefix/ldapsuffix в файле `/var/lib/pgpro/std-14/data/pg_hba.conf`, возможно, придётся поколдовать. Стоит попробовать их оставить пустыми (="").
|
||||
```config
|
||||
```python
|
||||
host <database> <user> <ip>/<mask> ldap ldapserver=<dc>.<domain>.<local> ldapscheme=ldaps ldapprefix="cn=" ldapsuffix=",cn=users,dc=<domain>,dc=<local>"
|
||||
```
|
||||
|
||||
|
@ -24,7 +24,7 @@ psql -c "CREATE ROLE repuser WITH REPLICATION LOGIN ENCRYPTED PASSWORD '<passwor
|
||||
|
||||
Дописываем в конец файла `/var/lib/pgpro/std-*/data/pg_hba.conf`:
|
||||
|
||||
```config
|
||||
```python
|
||||
host replication repuser <slave-ip>/32 md5
|
||||
```
|
||||
|
||||
@ -32,7 +32,7 @@ host replication repuser <slave-ip>/32 md5
|
||||
|
||||
В файл `/var/lib/pgpro/std-*/data/postgresql.conf` необходимо добавить следующие строки:
|
||||
|
||||
```config
|
||||
```python
|
||||
listen_addresses = 'localhost, <master-ip>'
|
||||
wal_level = hot_standby
|
||||
archive_mode = on
|
||||
@ -67,7 +67,7 @@ WAL-архивы будут складываться на NFS. Как сконф
|
||||
|
||||
В файл `/var/lib/pgpro/std-*/data/postgresql.conf` необходимо добавить следующие строки:
|
||||
|
||||
```config
|
||||
```python
|
||||
archive_command = 'test ! -f /nfs/%f && cp %p /nfs/%f'
|
||||
archive_cleanup_command = 'pg_archivecleanup -d /nfs %r 2>>cleanup.log'
|
||||
```
|
||||
@ -78,7 +78,7 @@ archive_cleanup_command = 'pg_archivecleanup -d /nfs %r 2>>cleanup.log'
|
||||
По умолчанию репликация работает в асинхронном режиме.
|
||||
Для того, чтобы она работала в синхронном режиме, необходимо изменить две строки в конфигурационном файле Postgres Pro `/var/lib/pgpro/std-*/data/postgresql.conf`:
|
||||
|
||||
```config
|
||||
```python
|
||||
synchronous_commit = on
|
||||
synchronous_standby_names = 'pgsql_0_node_0'
|
||||
```
|
||||
|
@ -7,7 +7,7 @@ tags: [linux, postgres]
|
||||
## Скрипт для бэкапа БД и глобальных объектов
|
||||
|
||||
В файл `/home/<username>/pg-backup.sh` необходимо добавить следующие строки:
|
||||
```config
|
||||
```python
|
||||
#!/usr/bin/env bash
|
||||
|
||||
pg_dump -U <username> -h <pg-hostname> -Fc <db> --file=<db>-$(date '+%Y-%m-%d').dump
|
||||
@ -17,7 +17,7 @@ pg_dumpall -U <username> -h <pg-hostname> --globals --file=gb-$(date '+%Y-%m-%d'
|
||||
## Файл cron с запуском скрипта (каждый день в 2:00)
|
||||
|
||||
Необходимо дописать в конец `crontab -e -u <username>` следующие строки:
|
||||
```config
|
||||
```python
|
||||
0 2 * * * /usr/bin/env bash /home/<username>/pg-backup.sh
|
||||
```
|
||||
|
||||
|
@ -15,7 +15,7 @@ openssl req -x509 -newkey rsa:4096 -nodes -keyout <key>.key -out <cert>.pem -sha
|
||||
## Включение TLS
|
||||
|
||||
В файл `/var/lib/pgpro/std-*/data/postgresql.conf` необходимо добавить следующие строки:
|
||||
```config
|
||||
```python
|
||||
ssl = on
|
||||
ssl_cert_file = '<cert>.pem'
|
||||
ssl_key_file = '<key>.pem'
|
||||
@ -25,7 +25,7 @@ listen_addresses = 'localhost, <master-ip>'
|
||||
## Разрешение доступа через TLS
|
||||
|
||||
В файл `/var/lib/pgpro/std-*/data/pg_hba.conf` необходимо добавить следующие строки:
|
||||
```config
|
||||
```python
|
||||
hostssl <user> <database> <client-ip> scram-sha-256
|
||||
```
|
||||
|
||||
|
20
content/posts/psql-to-csv.md
Normal file
20
content/posts/psql-to-csv.md
Normal file
@ -0,0 +1,20 @@
|
||||
---
|
||||
title: Конвертация PostgreSQL в CSV
|
||||
description: pSQL to CSV
|
||||
date: 2024-09-11T17:24:00+02:00
|
||||
tags: [linux, postgres]
|
||||
---
|
||||
## Конвертация
|
||||
```bash
|
||||
psql -d <database>
|
||||
```
|
||||
```psql
|
||||
DO $$
|
||||
DECLARE
|
||||
r RECORD;
|
||||
BEGIN
|
||||
FOR r IN (SELECT table_name FROM information_schema.tables WHERE table_schema = 'public') LOOP
|
||||
EXECUTE format('COPY %I TO %L WITH (FORMAT CSV, HEADER)', r.table_name, '/<path-to-csv>/' || r.table_name || '.csv');
|
||||
END LOOP;
|
||||
END $$;
|
||||
```
|
52
content/posts/pve-update.md
Normal file
52
content/posts/pve-update.md
Normal file
@ -0,0 +1,52 @@
|
||||
---
|
||||
title: Обновление Proxmox 7 -> Proxmox 8
|
||||
description: И дошлифовка
|
||||
date: 2024-12-10T14:05:00+01:00
|
||||
tags: [linux]
|
||||
---
|
||||
|
||||
## Актуализация ОС
|
||||
|
||||
```shell
|
||||
apt -y update
|
||||
apt -y dist-upgrade
|
||||
```
|
||||
|
||||
## Проверка готовности обновления
|
||||
|
||||
```shell
|
||||
pve7to8 --full
|
||||
```
|
||||
|
||||
## Актуализация репозиториев
|
||||
|
||||
```shell
|
||||
sed -i 's/bullseye/bookworm/g' /etc/apt/sources.list
|
||||
sed -i 's/bullseye/bookworm/g' /etc/apt/sources.list.d/*.list
|
||||
```
|
||||
|
||||
## Обновление ОС и PVE
|
||||
|
||||
```shell
|
||||
apt -y update
|
||||
apt -y dist-upgrade
|
||||
init 6
|
||||
```
|
||||
|
||||
## Дошлифовка
|
||||
|
||||
```shell
|
||||
bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/post-pve-install.sh)"
|
||||
```
|
||||
|
||||
## Ограничение потребление RAM zfs'ом
|
||||
В `/etc/modprobe.d/zfs.conf` добавить следующую строку (2GB на 1TB):
|
||||
```python
|
||||
options zfs zfs_arc_max=4294967296
|
||||
```
|
||||
|
||||
Применение и перезагрузка
|
||||
```shell
|
||||
update-initramfs -u -k all
|
||||
init 6
|
||||
```
|
35
content/posts/rhel-setup.md
Normal file
35
content/posts/rhel-setup.md
Normal file
@ -0,0 +1,35 @@
|
||||
---
|
||||
title: Активация и автоматические обновления в RHEL 9
|
||||
description: Небольшая памятка
|
||||
date: 2025-02-27T23:10:00+01:00
|
||||
tags: [linux, rhel]
|
||||
---
|
||||
|
||||
## Активация
|
||||
|
||||
```shell
|
||||
subscription-manager register --auto-attach
|
||||
insights-client --register
|
||||
```
|
||||
|
||||
## Автоматическая установка обновлений
|
||||
|
||||
```shell
|
||||
yum -y install dnf-automatic
|
||||
systemctl enable --now dnf-automatic-install.timer
|
||||
```
|
||||
|
||||
## Установка расширенного репозитория
|
||||
|
||||
```shell
|
||||
subscription-manager repos --enable codeready-builder-for-rhel-9-$(arch)-rpms
|
||||
yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
|
||||
```
|
||||
|
||||
## Отключение дампов ядра
|
||||
|
||||
```shell
|
||||
systemctl disable --now kdump
|
||||
grubby --update-kernel=ALL --remove-args="crashkernel"
|
||||
init 6
|
||||
```
|
@ -65,7 +65,7 @@ chmod +x /usr/local/bin/rubyc
|
||||
## Правка запускаемого файла собираемой утилиты
|
||||
|
||||
В запускаемый файл `exe/<ruby-util>` (обычно лежит в exe или bin) необходимо добавить в самое начало следующие строки:
|
||||
```config
|
||||
```python
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
require 'rubygems'
|
||||
|
@ -13,14 +13,14 @@ apt install -y openssh-server libpam-google-authenticator
|
||||
## Правка конфига PAM
|
||||
|
||||
В файл `/etc/pam.d/common-auth` необходимо добавить следующее:
|
||||
```config
|
||||
```python
|
||||
auth required pam_google_authenticator.so
|
||||
```
|
||||
|
||||
## Правка конфига ssh
|
||||
|
||||
В файл `/etc/ssh/sshd_config` необходимо добавить следующее:
|
||||
```config
|
||||
```python
|
||||
ChallengeResponseAuthentication yes
|
||||
```
|
||||
|
||||
@ -34,12 +34,12 @@ google-authenticator
|
||||
|
||||
## Управление факторами (необязательно)
|
||||
Для запроса ключа при аутентификации необходимо в файл `/etc/ssh/sshd_config` добавить следующее:
|
||||
```config
|
||||
```python
|
||||
AuthenticationMethods publickey,password publickey,keyboard-interactive
|
||||
```
|
||||
|
||||
Для отключения запроса пароля при аутентификации необходимо в файле `/etc/pam.d/sshd` закомментировать следующюю строку:
|
||||
```config
|
||||
```python
|
||||
# @include common-auth
|
||||
```
|
||||
|
||||
|
@ -11,7 +11,7 @@ apt -y install fail2ban
|
||||
|
||||
## Правило для ssh
|
||||
В файл `/etc/fail2ban/jail.d/sshd.conf` необходимо добавить следующее:
|
||||
```config
|
||||
```python
|
||||
[sshd]
|
||||
enabled = true
|
||||
port = <ssh-port>
|
||||
|
24
content/posts/sshfs-fstab.md
Normal file
24
content/posts/sshfs-fstab.md
Normal file
@ -0,0 +1,24 @@
|
||||
---
|
||||
title: Автомонтирование SSHFS
|
||||
description: SSHFS + fstab
|
||||
date: 2024-09-19T13:28:00+02:00
|
||||
tags: [linux, ssh]
|
||||
---
|
||||
|
||||
## Установка пакета на клиенте
|
||||
|
||||
```shell
|
||||
apt -y install sshfs
|
||||
```
|
||||
|
||||
## Добавление строки в /etc/fstab
|
||||
|
||||
```python
|
||||
<user>@<server-fqdn>:<remote-dir> <local-dir> sshfs allow_other,reconnect 0
|
||||
```
|
||||
|
||||
## Проверка монтирования
|
||||
|
||||
```shell
|
||||
mount -a
|
||||
```
|
31
content/posts/swap-create.md
Normal file
31
content/posts/swap-create.md
Normal file
@ -0,0 +1,31 @@
|
||||
---
|
||||
title: Создание SWAP-файла
|
||||
description: Файл подкачки в GNU/Linux
|
||||
date: 2025-01-12T22:10:00+01:00
|
||||
tags: [linux]
|
||||
---
|
||||
## Создания
|
||||
Размер файла подкачки
|
||||
|
||||
RAM `<= 2GB`, SWAP `x2`\
|
||||
RAM `2GB - 8GB`, SWAP `x1`\
|
||||
RAM `>= 8GB`, SWAP `>= 4GB`
|
||||
|
||||
```shell
|
||||
fallocate -l <size-in-gb>G /swap
|
||||
chmod 600 /swap
|
||||
mkswap /swap
|
||||
swapon /swap
|
||||
```
|
||||
|
||||
## Автомонтирование
|
||||
|
||||
В конец `/etc/fstab` необходимо добавить следующую строку
|
||||
```python
|
||||
/swap none swap sw 0 0
|
||||
```
|
||||
|
||||
И проверим корректность записи
|
||||
```shell
|
||||
mount -a
|
||||
```
|
63
content/posts/tor-website.md
Normal file
63
content/posts/tor-website.md
Normal file
@ -0,0 +1,63 @@
|
||||
---
|
||||
title: Поднятие сайта в TOR
|
||||
description: Caddy + torrc
|
||||
date: 2025-06-25T14:02:00+02:00
|
||||
tags: [linux, tor, caddy]
|
||||
---
|
||||
## Генерация vanity адреса
|
||||
|
||||
```bash
|
||||
docker run -it nwtgck/mkp224o
|
||||
mkp224o <domain-start-with> -s
|
||||
```
|
||||
|
||||
Формула для вычисления ожидаемого времени генерации:
|
||||
```python
|
||||
32^<number-of-characters>/<calc/sec> = <eta-in-seconds>
|
||||
```
|
||||
|
||||
## Установка и конфигурация TOR
|
||||
|
||||
Установка TOR:
|
||||
|
||||
```shell
|
||||
apt -y install tor
|
||||
```
|
||||
|
||||
Следующие строки необходимо добавить в `/etc/tor/torrc`:
|
||||
|
||||
```python
|
||||
HiddenServiceDir /var/lib/tor/website
|
||||
HiddenServicePort 80 127.0.0.1:80
|
||||
```
|
||||
|
||||
Файлы, сгенерированные `mkp224o`, необходимо добавить в директорию `/var/lib/tor/website`:
|
||||
|
||||
```shell
|
||||
mkdir /var/lib/tor/website
|
||||
mv <domain>.onion/* /var/lib/tor/website
|
||||
chown -R debian-tor: /var/lib/tor/website
|
||||
chmod -R 700 /var/lib/tor/website
|
||||
```
|
||||
|
||||
## Конфигурация Caddy
|
||||
|
||||
В `Caddyfile` необходимо добавить следующее:
|
||||
|
||||
```python
|
||||
<cleanet-doma.in> {
|
||||
header Onion-Location http://<domain>.onion{uri}
|
||||
respond "cleanet"
|
||||
}
|
||||
|
||||
http://<domain>.onion {
|
||||
respond "onion"
|
||||
}
|
||||
```
|
||||
|
||||
## Перезапуск сервисов
|
||||
|
||||
```shell
|
||||
systemctl restart tor
|
||||
systemctl restart caddy
|
||||
```
|
@ -50,7 +50,7 @@ secret-tool store --label "com.quexten.bitwarden-biometrics-handler" account <us
|
||||
## Правка конфига Firefox
|
||||
Необходимо создать файл `~/.mozilla/native-messaging-hosts/com.8bit.bitwarden.json` со следующим содержимым:
|
||||
|
||||
```config
|
||||
```python
|
||||
{
|
||||
"name": "com.8bit.bitwarden",
|
||||
"description": "Bitwarden desktop <-> browser bridge",
|
||||
|
32
content/posts/typing-emulate.md
Normal file
32
content/posts/typing-emulate.md
Normal file
@ -0,0 +1,32 @@
|
||||
---
|
||||
title: Эмуляция ввода текста из буфера обмена
|
||||
description: Для GNU/Linux
|
||||
date: 2024-10-24T17:07:00+02:00
|
||||
tags: [linux]
|
||||
---
|
||||
## Установка и удаление пакетов
|
||||
|
||||
```shell
|
||||
dnf install xclip xdotool
|
||||
rpm --nodeps -e xdg-desktop-portal-gnome
|
||||
```
|
||||
|
||||
## Создание исполняемого файла
|
||||
|
||||
В файл `/usr/local/bin/easyclipboard` необходимо добавить следующее:
|
||||
|
||||
```json
|
||||
#!/bin/bash
|
||||
xclip -selection clipboard -out | tr \\n \\r | xdotool selectwindow windowfocus type --clearmodifiers --delay 25 --window %@ --file -
|
||||
```
|
||||
|
||||
## Выдача прав на исполнение
|
||||
|
||||
```shell
|
||||
chmod +x /usr/local/bin/easyclipboard
|
||||
```
|
||||
|
||||
## ShortCut
|
||||
|
||||
Далее необходимо забиндить исполняемый файл на какой-нибудь shortcut (например, `Ctrl+E`) и можно пользоваться.
|
||||
При нажатии комбинации клавиш текст из буфера обмена вводится по-буквенно (очень помогает с vnc/crd и подобным).
|
29
content/posts/ubuntu-apparmor-disable.md
Normal file
29
content/posts/ubuntu-apparmor-disable.md
Normal file
@ -0,0 +1,29 @@
|
||||
---
|
||||
title: Отключение AppArmor в Ubuntu 24.04
|
||||
description: purge apparmor
|
||||
date: 2024-10-09T10:51:00+02:00
|
||||
tags: [linux, security]
|
||||
---
|
||||
## Выключение сервиса
|
||||
|
||||
```shell
|
||||
systemctl disable --now apparmor
|
||||
```
|
||||
|
||||
## Удаление AppArmor
|
||||
|
||||
```shell
|
||||
apt remove --assume-yes --purge apparmor
|
||||
```
|
||||
|
||||
## Перезагрузка
|
||||
|
||||
```shell
|
||||
init 6
|
||||
```
|
||||
|
||||
## Одной командой
|
||||
|
||||
```shell
|
||||
systemctl disable --now apparmor && apt remove --assume-yes --purge apparmor && init 6
|
||||
```
|
@ -9,7 +9,7 @@ tags: [vmware]
|
||||
|
||||
В файл `/etc/vmware/config` необходимо добавить следующее:
|
||||
|
||||
```config
|
||||
```python
|
||||
vmx.fullpath = "/bin/vmx"
|
||||
isolation.tools.copy.disable="FALSE"
|
||||
isolation.tools.paste.disable="FALSE"
|
||||
|
@ -9,7 +9,7 @@ tags: [vmware]
|
||||
|
||||
В файл `/etc/rc.local.d/local.sh` необходимо добавить следующее:
|
||||
|
||||
```config
|
||||
```python
|
||||
#!/bin/sh ++group=host/vim/vmvisor/boot
|
||||
|
||||
esxcli system time set --day=20 --month=3 --year=2022 --hour=10 --min=0 --sec=0
|
||||
|
@ -17,7 +17,7 @@ wg genkey | tee privatekey | wg pubkey > publickey
|
||||
## Конфигурация сервера
|
||||
### Форвардинг пакетов
|
||||
В файл `/etc/sysctl.conf` необходимо добавить следующие строки:
|
||||
```config
|
||||
```python
|
||||
net.ipv4.ip_forward=1
|
||||
net.ipv6.conf.all.forwarding=1
|
||||
```
|
||||
@ -25,7 +25,7 @@ net.ipv6.conf.all.forwarding=1
|
||||
|
||||
### Конфигурация WireGuard
|
||||
В файл `/etc/wireguard/<conn-name>.conf` необходимо дописать следующее:
|
||||
```config
|
||||
```python
|
||||
[Interface]
|
||||
PrivateKey = <private-key>
|
||||
Address = 172.0.0.1/24
|
||||
@ -48,7 +48,7 @@ systemctl enable --now wg-quick@<conn-name>.service
|
||||
## Конфигурация клиента
|
||||
### Конфигурация WireGuard
|
||||
В файл `/etc/wireguard/<conn-name>.conf` необходимо дописать следующее:
|
||||
```config
|
||||
```python
|
||||
[Interface]
|
||||
Address = 172.0.0.2/32
|
||||
PrivateKey = <private-key>
|
||||
|
@ -8,7 +8,7 @@ tags: [windows]
|
||||
## Отключение
|
||||
В ветке реестра выставить значение value на 1.
|
||||
|
||||
```config
|
||||
```python
|
||||
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PolicyManager\default\Start\HideShutDown
|
||||
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PolicyManager\default\Start\HideRestart
|
||||
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PolicyManager\default\Start\HideSleep
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 764 KiB |
Submodule themes/themu updated: 7eb486c888...257284dd68
Reference in New Issue
Block a user