No menu items!
No menu items!
More

    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