пересборка Python 3.10 с поддержкой SSL на CentOS 7

Цель: писать уникальные тексты большого объёма, например, 5000 символов

openAI

nano openai_text.py

import openai

# Вставьте сюда ваш API-ключ
openai.api_key = 'your-api-key'

# Подготовка запроса
prompt = """
Напиши SEO-текст объёмом 5000 символов (без пробелов) по ключевым словам:
1) асфальтировка дворов;
2) укладка асфальта;
3) асфальтирование в Москве и области;
4) цена на асфальтирование.

Структура:
- Вовлекающее вступление
- Несколько подзаголовков
- Нумерованный или маркированный список (хотя бы один)
- Употреби ключи равномерно и естественно
- В конце — призыв к действию
- Язык — простой, разговорный, продающий

"""

# Запрос к модели
response = openai.ChatCompletion.create(
    model="gpt-4",
    messages=[{"role": "user", "content": prompt}],
    temperature=0.7,
    max_tokens=2500  # Примерно соответствует ~5000 символам без пробелов
)

# Вывод результата
text = response['choices'][0]['message']['content']
print(text)

💡 Если текст выходит слишком длинным/коротким, можно подогнать max_tokens, разбить генерацию на части, или считать длину текста в символах и дозапрашивать дополнение.
 

Использование локальной модели (без интернета и API)

🚀 Популярные локальные модели:

МодельГде использоватьТребования
GPT4AllЛокально на ПКCPU/GPU, RAM 8+ ГБ
LLama.cpp (на базе LLaMA 2)Через терминалБыстро работает на CPU
KoboldAI + Pygmalion/MistralЧерез браузерПоддержка GPU желательно
TextGen WebUI (на базе Mistral, LLaMA 2, Zephyr и др.)Много UI-опций

 

Запуск GPT4All:

git clone https://github.com/nomic-ai/gpt4all.git
cd gpt4all
pip install -r requirements.txt
python gpt4all.py


 

Смотрим, какая локальная версия Питон уже есть: допустим, удаляем старую и пересобираем

ls /usr/local/lib/

 rm -rf /usr/local/lib/python3.10

rm -f /usr/local/bin/python3.10 /usr/local/bin/pip3.10

cd /usr/src
sudo wget https://www.python.org/ftp/python/3.10.13/Python-3.10.13.tgz
sudo tar xzf Python-3.10.13.tgz
cd Python-3.10.13

 

Очистить предыдущую сборку: make clean

 

yum install gcc openssl-devel bzip2-devel libffi-devel

openssl version

Python requires OpenSSL 1.1.1 or newer

 

🧩 Проблема:

Python 3.10 не может использовать системный OpenSSL CentOS 7, потому что он слишком старый.

Собираем и устанавливаем OpenSSL 1.1.1+ вручную в /usr/local/openssl, и пересобираем Python 3.10.13 с указанием на новую версию

🧱 0-й ШАГ: Подготовка

ещё понадобится GCC, который требует make > 4.x

Поэтому сразу всё скомпилируем в одном make v4

make --version

cd /usr/src
sudo curl -O https://ftp.gnu.org/gnu/make/make-4.4.tar.gz
sudo tar -xzf make-4.4.tar.gz
cd make-4.4

./configure --prefix=/opt/make-4.4
make -j$(nproc)
sudo make install

 ln -s /opt/make-4.4/bin/make /usr/bin/make4

 make4 --version

🔽 1. Скачаем и соберём OpenSSL 1.1.1:

cd /usr/src
sudo wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
sudo tar xzf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w

sudo ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib
sudo make4 -j$(nproc)
sudo make4 install
ln -s /usr/local/openssl/bin/openssl /usr/bin/ssl_new
ssl_new version

🧪 2. Убедимся, что новая OpenSSL доступна:

/usr/local/openssl/bin/openssl version
Ожидаемый вывод:OpenSSL 1.1.1w ...

🛠 3. Пересобериаем Python 3.10.13 с указанием OpenSSL:

cd /usr/src/Python-3.10.13
make clean
make4 clean

./configure \
  --enable-optimizations \
  --with-openssl=/usr/local/openssl \
  --with-openssl-rpath=auto

make4 -j$(nproc)
make4 altinstall

✅ 4. Проверка

/usr/local/bin/python3.10 -c "import ssl; print(ssl.OPENSSL_VERSION)"

Если происходит ошибка:
/usr/local/openssl/bin/openssl version /usr/local/openssl/bin/openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

то означает, что динамический линковщик (ld) не может найти библиотеку OpenSSL, потому что она установлена в нестандартное место:/usr/local/openssl/lib

 
Решение: сообщить системе, где искать библиотеки OpenSSL
🟢 Вариант 1: Временный (на текущую сессию)

export LD_LIBRARY_PATH=/usr/local/openssl/lib:$LD_LIBRARY_PATH

/usr/local/openssl/bin/openssl version

🔵 Вариант 2: Постоянный (для всей системы)
  1. Добавьте путь к библиотекам /etc/ld.so.conf.d/openssl-1.1.1.conf:

echo "/usr/local/openssl/lib" | sudo tee /etc/ld.so.conf.d/openssl-1.1.1.conf

cat /etc/ld.so.conf.d/openssl-1.1.1.conf
/usr/local/openssl/lib

2. Обновите кэш динамических библиотек: sudo ldconfig

  1. Теперь можно проверять: /usr/local/openssl/bin/openssl version

OpenSSL 1.1.1w  11 Sep 2023

 

⏭ После этого — пересобирайте Python 3.10.13, как обсуждали:

cd /usr/src/Python-3.10.13
make4 clean

./configure \
  --enable-optimizations \
  --with-openssl=/usr/local/openssl \
  --with-openssl-rpath=auto

make4 -j$(nproc)
make4 altinstall

 

Как работать с локальной верисей Питон?

Обращение к pip: /usr/local/bin/pip3.10
Обращение к python: /usr/local/bin/python3.10

Установка пакетов: /usr/local/bin/pip3.10 install requests flask

 

make -j — это значит "собирай как можно быстрее, без ограничения потоков" → может перегрузить систему.

Лучше всего использовать:
- make -j$(nproc) — безопасно и эффективно.
- или вручную: make -j4 — если хочешь контролировать.

make -j$(nproc) = "Запустит сборку во столько потоков, сколько ядер у процессора" — это быстро, эффективно и безопасно.

 

🚀 Краткие советы по теме:

  • 🔧 Сборка в фоне с логом:

    make -j$(nproc) > build.log 2>&1 &
    tail -f build.log
  • 🧠 Сборка в режиме "паузить при ошибках":

    make -j$(nproc) -k

Флаг -k позволяет не останавливать всё при первой ошибке, а продолжать сборку других целей.

 

 

 

При работе с  GPT4All требуется glibc 2.32, а CentOS 7 (или RHEL 7) использует glibc 2.17

❗ Проблема: GLIBC_2.32 not found

🔥 Почему это критично?

glibc — базовая системная библиотека. Обновить её прямо в CentOS 7 — опасно: можно сломать всю систему, потому что от неё зависит ядро, yum, SSH и всё остальное.

✅ Возможные решения

🟨Вариант 1: Использовать другую модель (без .so)

использовать текстовую модель через transformers или text-generation-webui, которые не требуют .so:

pip install transformers torch

python3.10 -c "
from transformers import pipeline
generator = pipeline('text-generation', model='distilgpt2')
print(generator('Асфальтировка дворов в Москве — ', max_length=200)[0]['generated_text'])
"

🟥 Вариант 2: Скомпилировать glibc 2.32 вручную

Можно собрать glibc вручную в /opt/glibc-2.32 и запускать через переменную окружения, но это крайне опасно и нестабильно. Подходит только для опытных линуксоидов и тестов в песочнице.

 

CentOS 7 по умолчанию часто поставляется с очень старыми сборщиками (например, gcc 4.8.x), а для glibc 2.32 нужен gcc >= 7.1.

Проверим версию GCC

gcc --version
Если версия ниже 7 — тебе обязательно нужно обновить GCC. CentOS 7 по умолчанию даёт gcc 4.8.5, а glibc 2.32 требует как минимум gcc 7.1+.
 

📥 ШАГ 1: Скачать исходники GCC 11.4

cd /usr/src
sudo wget https://ftp.gnu.org/gnu/gcc/gcc-11.4.0/gcc-11.4.0.tar.gz
sudo tar -xzf gcc-11.4.0.tar.gz
cd gcc-11.4.0

📦 ШАГ 2: Скачай зависимости GCC

./contrib/download_prerequisites

Это подтянет gmp, mpfr, mpc нужных версий в папку.

📁 ШАГ 3: Собрать в отдельную папку

mkdir ../gcc-11-build
cd ../gcc-11-build

Сконфигурировать:
../gcc-11.4.0/configure \
  --prefix=/opt/gcc-11.4 \
  --enable-languages=c,c++ \
  --disable-multilib

Сборка:

make4 -j$(nproc)

💡 Это может занять 30–60 минут.

Затем установка:

 make4 install

✅ ШАГ 4: Проверка

Добавь gcc в PATH (временно):

export PATH=/opt/gcc-11.4/bin:$PATH
export LD_LIBRARY_PATH=/opt/gcc-11.4/lib64:$LD_LIBRARY_PATH

Проверь:

gcc --version
# Должно показать: gcc (GCC) 11.4.0

strings /opt/gcc-11.4/lib64/libstdc++.so.6 | grep GLIBCXX_

 

 

GCC 9.5

wget https://ftp.gnu.org/gnu/gcc/gcc-9.5.0/gcc-9.5.0.tar.gz
 tar -xzvf gcc-9.5.0.tar.gz
cd gcc-9.5.0

mkdir ../gcc-9-build
cd ../gcc-9-build


../gcc-9.5.0/configure \
  --prefix=/opt/gcc-9.5 \
  --enable-languages=c,c++ \
  --disable-multilib

make4 -j$(nproc)

make4 install

export PATH=/opt/gcc-9.5/bin:$PATH
export LD_LIBRARY_PATH=/opt/gcc-9.5/lib64:$LD_LIBRARY_PATH

gcc --version

strings /opt/gcc-9.5/lib64/libstdc++.so.6 | grep GLIBCXX_

GLIBCXX_3.4
GLIBCXX_3.4.1
..................................
GLIBCXX_3.4.28

Установка GLIBC 2.32

cd /usr/src
 wget https://mirror2.evolution-host.com/gnu/glibc/glibc-2.32.tar.gz
  tar xzvf glibc-2.32.tar.gz
 cd glibc-2.32
mkdir build
 cd build

 export PYTHON=/usr/local/bin/python3.10
export MAKE=/opt/make-4.4/bin/make
../glibc-2.32/configure \
   --prefix=/opt/glibc2.32 \
   --disable-werror \
   CC="/opt/gcc-9.5/bin/gcc" \
   CXX="/opt/gcc-9.5/bin/g++" \
   CFLAGS="-O2" \
   CXXFLAGS="-O2"

/opt/glibc2.32/lib/libc.so.6
GNU C Library (GNU libc) release release version 2.32.
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 9.5.0.

 

 

Для работы GPT4ALL нужно:
  1. GCC - libstdc++.so.6: version `GLIBCXX_3.4.29'
  2. GLIBC - libc.so.6: version `GLIBC_2.34'
strings /opt/gcc-11.4/lib64/libstdc++.so.6 | grep GLIBCXX_
strings /opt/glibc-2.34/lib/libc.so.6 | grep GLIBC_

 

 

GPT4All

/REPOSITORY/python_apps/gpt4all

cd /REPOSITORY

mkdir python_apps

git clone https://github.com/nomic-ai/gpt4all.git
cd gpt4all

 cat > requirements.txt <<EOF
> transformers
> torch
> EOF

pip3.10 install -r requirements.txt

 cat > test_gtp4all.py <<EOF
> from gpt4all import GPT4All
> print("✅ It works!")
> EOF

python3.10 test_gpt4all.py

 

🛠 Create the wrapper script

sudo tee /usr/local/bin/python-gpt > /dev/null << 'EOF'
#!/bin/bash
exec /opt/glibc-2.34/lib/ld-linux-x86-64.so.2 \
  --library-path /opt/glibc-2.34/lib:/opt/gcc-11.4/lib64:/lib64:/usr/lib64:/usr/local/lib \
  /usr/local/bin/python3.10 "$@"
EOF

sudo chmod +x /usr/local/bin/python-gpt

 

nano chat_gpt.py

from openai import OpenAI

client = OpenAI(
    api_key="your_key_here"
)

completion = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "developer", "content": "Talk like a pirate."},
        {
            "role": "user",
            "content": "How do I check if a Python object is an instance of a class?",
        },
    ],
)

print(completion.choices[0].message.content)

 

 

cd /REPOSITORY/python_apps

 git clone --recurse-submodules https://github.com/nomic-ai/gpt4all.git
cd gpt4all

 cd gpt4all-backend
mkdir build
 cd build

CC=/opt/gcc-13.3/bin/gcc CXX=/opt/gcc-13.3/bin/g++ cmake .. -DLLMODEL_CUDA=OFF -DLLMODEL_KOMPUTE=OFF -DCMAKE_CXX_STANDARD=23

 LD_LIBRARY_PATH=/opt/gcc-13.3/lib64 cmake --build . --config Release

 

cd ../..

wget https://huggingface.co/TheBloke/CapybaraHermes-2.5-Mistral-7B-GGUF/resol... -P models/

 nano /usr/local/bin/python-gpt

#!/bin/bash
exec /opt/glibc2.34/lib/ld-linux-x86-64.so.2 \
  --library-path /opt/glibc2.34/lib:/opt/gcc-13.3/lib64:/lib64:/usr/lib64:/usr/local/lib \
  /usr/local/bin/python3.10 "$@"

nano llama_chat.py

from llama_cpp import Llama

llm = Llama(
    model_path="models/capybarahermes-2.5-mistral-7b.Q4_0.gguf",
    n_ctx=4096,
    n_threads=5
)

print("CapybaraHermes Chat (llama-cpp):")

history = ""
while True:
    user_input = input("You: ")
    if user_input.lower() in ("exit", "quit"):
        break

    history += f"User: {user_input}\nAssistant:"
    output = llm(history, max_tokens=200, stop=["User:", "Assistant:"])
    reply = output["choices"][0]["text"].strip()

    print("AI:", reply)
    history += f" {reply}\n"

 sudo tee /usr/local/bin/python-gpt > /dev/null << 'EOF exec /opt/glibc-2.34/lib/ld-linux-x86-64.so.2 \
  --library-path /opt/glibc-2.34/lib:/lib64:/usr/lib64:/usr/local/lib \
   /usr/local/bin/python3.10 "$@"
 EOF

 chmod +x /usr/local/bin/python-gpt

python-gpt llama_chat.py

 

Build Llama

new  cURL

cd /usr/src
 8751  May 29 22:31:40 wget https://curl.se/download/curl-7.88.1.tar.gz
 8752  May 29 22:31:46 tar xzvf curl-7.88.1.tar.gz
 8753  May 29 22:31:52 cd curl-7.88.1

./configure --prefix=/opt/curl-7.8 \
  CC="/opt/gcc-13.3/bin/gcc" CXX="/opt/gcc-13.3/bin/g++" \
  --with-ssl=/usr/local/openssl

 

 

 

cd /REPOSITORY
 git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp

 mkdir build
 cd build

export OPENSSL_ROOT_DIR=/usr/local/openssl

 CC=/opt/gcc-13.3/bin/gcc CXX=/opt/gcc-13.3/bin/g++ cmake ..

 CURL=/opt/curl-7.8/bin/curl CC=/opt/gcc-13.3/bin/gcc CXX=/opt/gcc-13.3/bin/g++ cmake ..

 cmake -DCURL_ROOT=/opt/curl-7.8 -DCMAKE_C_COMPILER=/opt/gcc-13.3/bin/gcc -DCMAKE_CXX_COMPILER=/opt/gcc-13.3/bin/g++ ..

LD_LIBRARY_PATH=/opt/gcc-13.3/lib64 make -j$(nproc)
 LD_LIBRARY_PATH=/opt/gcc-13.3/lib64 cmake --build .

Test: ls -lh bin/llama-cli

/opt/glibc2.34/lib/ld-linux-x86-64.so.2   --library-path /opt/glibc2.34/lib:/opt/gcc-13.3/lib64:/usr/local/openssl/lib:/usr/lib64   ./bin/llama-cli --help

cd /REPOSITORY/llama.cpp

cat << 'EOF' > llama-run
#!/bin/bash
/opt/glibc2.34/lib/ld-linux-x86-64.so.2 \
  --library-path /opt/glibc2.34/lib:/opt/gcc-13.3/lib64:/usr/local/openssl/lib:/usr/lib64 \
  ./build/bin/llama-cli "$@"
EOF

chmod +x llama-run

./llama-run --help

 

nano  setup_mistral.py

from huggingface_hub import login

login(token="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")

from huggingface_hub import snapshot_download
from pathlib import Path

mistral_models_path = Path.home().joinpath('mistral_models', '7B-Instruct-v0.3')
mistral_models_path.mkdir(parents=True, exist_ok=True)

snapshot_download(repo_id="mistralai/Mistral-7B-Instruct-v0.3", allow_patterns=["params.json", "consolidated.safetensors", "tokenizer.model.v3"], local_dir=mistral_models_path)

 

python-gpt setup_mistral.py

 

cd /root/mistral_models/7B-Instruct-v0.3

curl -L -H "Authorization: Bearer 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" \
  https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.3/resolve/main/t... \
  -o tokenizer.json

 

pip3.10  install --upgrade transformers

python-gpt /REPOSITORY/llama.cpp/gguf-py/scripts/gguf_info.py /REPOSITORY/python_apps/gpt4all/models/mistral-7b-instruct-v0.3.gguf


Цена такой работы:

Ценообразование зависит от:

  • сложности задачи (структура, ключи, стиль),

  • опыта исполнителя,

  • способа генерации (ручной копирайтинг или AI + доработка).

📌 Примерные расценки:

СпособСредняя цена за 1000 зн. без пробеловИтого за 5000 зн.Комментарий
AI + правка вручную100–200 ₽500–1000 ₽быстро, эффективно
Профессиональный копирайтер300–500 ₽1500–2500 ₽ручная работа, продающий стиль
SEO-агентство500–700 ₽2500–3500 ₽включает анализ и оптимизацию

🎯 Что можно предложить клиенту

  • Генерация текста + редактура

  • Оптимизация по SEO

  • Размещение на сайте (если требуется)

  • Консультация по продвижению

 

2025Stable CORE