Chạy Python 3.10 trên Ubuntu 16.04

🧩 Tổng quan

Trong quá trình triển khai hệ thống giám sát Admin.Collector trên một server nội bộ sử dụng Ubuntu 16.04, mình gặp phải rất nhiều rào cản kỹ thuật, đặc biệt là khi:

  • Ubuntu 16.04 chỉ hỗ trợ Python 3.5 mặc định
  • pip không hoạt động do lỗi SSL
  • Mạng nội bộ yêu cầu sử dụng proxy bắt buộc
  • Một số package hiện đại yêu cầu Python >= 3.7

Bài viết này chia sẻ lại toàn bộ quá trình mình xử lý các vấn đề trên, từ việc build Python 3.10 trên Ubuntu 16.04, cấu hình proxy, bypass SSL, cho đến việc sử dụng pip thành công trong môi trường nội bộ.

📌 Tại sao không dùng Docker?

Mình cũng từng cân nhắc việc dùng container Ubuntu 22.04 với Python 3.10 sẵn có, nhưng gặp phải giới hạn:

  • Python script cần truy cập tài nguyên hệ thống host như zpool status, sensors, df, …
  • Nếu dùng container, phải mount thêm nhiều thứ: /sys, /proc, /dev, … và cần chạy container ở chế độ --privileged

Vì vậy, mình quyết định chạy trực tiếp trên host để tránh rườm rà.

🧪 Các vấn đề thường gặp

Vấn đềTriệu chứngNguyên nhân
pip lỗi SSL[SSL: CERTIFICATE_VERIFY_FAILED]Python thiếu _ssl
pip không kết nối[Errno -3] Temporary failure in name resolutionDNS không hoạt động
Không tải được packageNo matching distribution foundDo dùng HTTP thay vì HTTPS
Mạng nội bộ có proxypip timeout hoặc không phản hồiKhông khai báo proxy hoặc proxy chèn CA

🛠 Hướng dẫn chi tiết

✅ Cài OpenSSL 1.1.1w thủ công

Ubuntu 16.04 mặc định chỉ có libssl 1.0.2, không đủ để build Python 3.10 với SSL.

cd /usr/local/src
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
tar -xvzf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
./config --prefix=/opt/openssl --openssldir=/opt/openssl
make -j$(nproc)
make install

🐍 Build Python 3.10 với SSL đầy đủ

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

./configure --enable-optimizations --with-openssl=/opt/openssl \
  LDFLAGS="-Wl,-rpath=/opt/openssl/lib"

make -j$(nproc)
make altinstall

🐍 Tạo venv với Python 3.10

/usr/local/bin/python3.10 -m venv /etc/admin.collector/venv
source /etc/admin.collector/venv/bin/activate
python -m ensurepip --upgrade
pip install --upgrade pip

🌐 Cấu hình proxy nội bộ

Tạo file ~/proxy:

export http_proxy=http://10.10.14.200:3128
export https_proxy=http://10.10.14.200:3128
export no_proxy=localhost,10.10.14.0/24

Khi dùng:

source ~/proxy

⚠️ Bypass SSL nếu proxy chặn HTTPS

Chạy pip như sau:

pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org \
  --disable-pip-version-check --no-cache-dir \
  --index-url http://pypi.org/simple \
  --extra-index-url https://pypi.org/simple \
  -r /etc/admin.collector/source/requirements.txt

📥 Ví dụ requirements.txt (module_req)

mysql-connector-python==8.0.23
protobuf==3.19.6
setuptools_rust
prometheus_client
jsonpath_ng
pyopenssl
requests
pyyaml
docker
wheel
pandas
unidecode
PySocks

Nếu package nào lỗi không tìm thấy (ví dụ mysql-connector-python==8.0.23), có thể:

  • Gỡ ==version để pip tự chọn phiên bản phù hợp
  • Hoặc tải .whl offline từ máy khác

Script tự động sửa toàn bộ

Dưới đây là script hoàn chỉnh để:

  • Cài OpenSSL 1.1.1w từ source
  • Build Python 3.10.14 với SSL hỗ trợ đầy đủ
  • Tạo lại virtualenv

🛠️ Script fix_python_ssl.sh

#!/bin/bash
set -e

echo "=== [Cài OpenSSL 1.1.1w] ==="
cd /usr/local/src
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
tar -xvzf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
./config --prefix=/opt/openssl --openssldir=/opt/openssl
make -j$(nproc)
make install

echo "✅ OpenSSL 1.1.1w đã cài ở /opt/openssl"

echo "=== [Cài Python 3.10.14 với SSL] ==="
cd /usr/src
rm -rf Python-3.10.14
wget https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz
tar xzf Python-3.10.14.tgz
cd Python-3.10.14
./configure --enable-optimizations --with-openssl=/opt/openssl LDFLAGS="-Wl,-rpath=/opt/openssl/lib"
make -j$(nproc)
make altinstall

echo "✅ Python 3.10.14 đã build lại với SSL"

echo "=== [Tạo lại venv collector] ==="
rm -rf /etc/admin.collector/venv
/usr/local/bin/python3.10 -m venv /etc/admin.collector/venv
source /etc/admin.collector/venv/bin/activate
python -m ensurepip --upgrade
pip install --upgrade pip

echo "✅ Virtualenv đã sẵn sàng với pip mới"

echo "Bạn có thể chạy: pip install -r /etc/admin.collector/source/requirements.txt"

▶️ Cách sử dụng

Tạo file và dán nội dung trên vào:

vi fix_python_ssl.sh

Chạy script:

    chmod +x fix_python_ssl.sh
    sudo ./fix_python_ssl.sh
    

    Sau khi chạy xong:

    source /etc/admin.collector/venv/bin/activate
    pip install -r /etc/admin.collector/source/requirements.txt
    

    ⚖️ Ưu điểm vs Nhược điểm khi build Python thủ công

    ✅ Ưu điểm❌ Nhược điểm
    Có thể dùng Python 3.10 ngay cả trên hệ thống cũPhải build thủ công, khá tốn thời gian
    Tùy biến được compile flags và OpenSSLDễ sai nếu thiếu thư viện
    Hoạt động tốt trong môi trường có proxyKhông phù hợp cho người mới

    💡 Sơ đồ triển khai

    +------------------------------+
    | Ubuntu 16.04 (Python 3.5)   |
    |     ↓ build OpenSSL 1.1.1   |
    |     ↓ build Python 3.10     |
    |     ↓ create virtualenv     |
    |     ↓ source proxy          |
    |     ↓ pip install gói       |
    +------------------------------+
    

    🧠 Lời khuyên

    • ✅ Nếu có thể, nâng cấp lên Ubuntu 20.04 hoặc 22.04 để tiết kiệm thời gian.
    • 🧪 Nếu buộc phải dùng Ubuntu 16.04, hãy đảm bảo bạn hiểu rõ proxy và SSL.
    • 🧰 Bạn nên viết 1 script setup tự động các bước build để tái sử dụng dễ dàng.
    • 🚫 Không nên để --trusted-host--index-url trong production script.

    ✅ Kết luận

    Triển khai Python 3.10 trên Ubuntu 16.04 trong môi trường mạng nội bộ có proxy là hoàn toàn khả thi, nhưng cần kiên nhẫn và hiểu kỹ hệ thống. Sau khi vượt qua các rào cản như SSL, proxy và pip, bạn sẽ có một môi trường Python hiện đại để chạy bất kỳ ứng dụng nào bạn cần, kể cả trong hệ thống giám sát như Admin.Collector.

    Bài viết gần đây

    spot_img

    Related Stories

    Leave A Reply

    Please enter your comment!
    Please enter your name here

    Đăng ký nhận thông tin bài viết qua email