Ngiêm cấm sử đụng PROXY và VPS vào mục đích trái pháp luật bạn sẽ phải chịu toàn bộ trách nhiệm trước pháp luật khi sử dụng dịch vụ của chúng tôi tks!
Zypper proxy: cấu hình cho openSUSE, SUSE và cách kiểm tra

Zypper proxy: cấu hình cho openSUSE, SUSE và cách kiểm tra

Chuyên viên Kỹ thuật ProxyVN 08-20-2026 Đang tính... phút đọc

Zypper proxy là cách để trình quản lý gói zypper của openSUSE và SUSE tải metadata và gói RPM qua một máy chủ proxy. ProxyVN đọc man page zypper và mã nguồn libzypp để biết cấu hình nào thắng cấu hình nào. Bài kèm script mô phỏng đã chạy với proxy lab có mật khẩu.

Zypper proxy dùng trong tình huống nào

Zypper là giao diện dòng lệnh của thư viện libzypp, và gần như mọi thứ liên quan đến mạng nằm trong thư viện này. Khi anh em chạy zypper refresh hay zypper install trên openSUSE Leap, Tumbleweed hoặc SUSE Linux Enterprise, libzypp là bên tải file. Vì thế cấu hình proxy cho zypper thực chất là cấu hình proxy cho libzypp.

Tình huống hay gặp nhất là máy chủ trong mạng công ty chỉ ra ngoài qua một proxy HTTP. Tình huống thứ hai là một máy ở nước ngoài cần tải gói qua proxy gần kho gói hơn. Tình huống thứ ba là kiểm thử: anh em muốn xem một kho gói trả nội dung gì khi truy cập từ một IP khác.

Bài này giữ phạm vi hẹp. Mình chỉ nói về cách zypper chọn proxy, các nơi có thể đặt cấu hình và cách kiểm tra từng nơi. Những khái niệm chung về biến môi trường và danh sách ngoại lệ có ở bài no_proxy là gì.

Bài này khác các bài về trình quản lý gói ở đâu

ProxyVN đã có bài yum và dnf proxy cho họ Red Hat và bài cấu hình proxy Ubuntu cho họ Debian. Zypper khác ở chỗ nó có hai tầng cấu hình riêng: tệp /etc/sysconfig/proxy của SUSE và các tham số proxy gắn thẳng vào địa chỉ kho gói.

Hai tầng này không có trong yum hay apt. Mình sẽ đi qua từng tầng, rồi gộp lại thành một thứ tự ưu tiên duy nhất mà anh em có thể tra khi gỡ lỗi.

Phạm vi những gì đã kiểm chứng

Máy mình dùng để viết bài không có Docker, không có WSL và không có bản phân phối Linux nào, nên mình không chạy zypper thật. Mình đọc man page zypper và mã nguồn libzypp trên GitHub, rồi viết script Python mô phỏng các quy tắc đọc được.

Mọi kết quả trong bài là kết quả của script mô phỏng chạy với proxy HTTP tự dựng có mật khẩu. Chỗ nào mình suy ra từ mã nguồn mà chưa chạy trên SUSE thật, bài sẽ ghi rõ để anh em tự kiểm tra bằng lệnh được nêu.

Zypper proxy và ba nơi chứa cấu hình trên openSUSE, SUSE

Ba nơi chứa cấu hình proxy của zypper

Ba nơi chứa cấu hình proxy của zypper

Có ba nơi có thể quyết định zypper dùng proxy nào. Nơi thứ nhất là tham số nằm trong địa chỉ kho gói. Nơi thứ hai là cấu hình proxy hệ thống, thường là tệp /etc/sysconfig/proxy. Nơi thứ ba là biến môi trường mà libcurl tự đọc khi hai nơi trên đều không đặt proxy.

Điều khiến người dùng rối là ba nơi này không bằng nhau. Chúng được kiểm tra theo thứ tự, và nơi nào có kết quả trước thì thắng. Hiểu thứ tự này giúp anh em tránh tình huống sửa tệp cấu hình mà zypper vẫn đi theo một đường khác.

Tầng đầu tiên: tham số trong URL kho gói

Man page zypper có một câu ngắn trong phần Resource Identifiers: proxy tường minh có thể truyền qua các tham số proxy, proxyport, proxyuser và proxypass. Mã nguồn libzypp cho biết chi tiết hơn. Trong hàm đọc cài đặt từ URL của curlhelper.cc, tham số proxy được ghép với proxyport bằng dấu hai chấm, còn proxyuser và proxypass đặt tài khoản.

Một giá trị riêng cần nhớ: _none_. Khi tham số proxy bằng _none_, libzypp tắt proxy cho kho đó, kể cả khi hệ thống đã bật proxy. Đây là cách gọn để một kho nội bộ đi thẳng trong khi các kho khác đi qua proxy.

Tầng thứ hai: cấu hình proxy hệ thống

Nếu URL kho không có tham số proxy, libzypp hỏi cấu hình hệ thống. Mã nguồn ProxyInfo chọn hai cách. Nếu máy có thư viện libproxy, libzypp dùng nó và ép libproxy đọc tệp /etc/sysconfig/proxy khi tệp tồn tại. Nếu không có libproxy, libzypp đọc trực tiếp tệp /etc/sysconfig/proxy.

Cả hai cách đều dựa vào cùng một tệp, nên với người dùng SUSE, chỗ cần sửa là /etc/sysconfig/proxy. Mã nguồn cho thấy libzypp chỉ đọc tệp này, không tự ghi vào nó.

Tầng thứ ba: biến môi trường qua libcurl

Khi cả hai tầng trên không cho ra proxy nào, đoạn mã gọi curl của libzypp ghi lại rằng proxy chưa đặt và libcurl có thể tự nhìn vào môi trường. Nghĩa là biến như http_proxy hay https_proxy có thể có tác dụng, nhưng chỉ như phương án cuối, và chỉ với tiến trình có các biến đó.

Với zypper chạy bằng sudo, biến của user thường thường không sang được tiến trình root. Phần kiểm tra bên dưới sẽ có lệnh để xem biến nào thực sự tới zypper.

Chuẩn bị phiên bản, tài khoản proxy và môi trường kiểm thử cho zypper proxy

Trước khi sửa tệp, anh em cần biết ba điều: phiên bản zypper và libzypp, loại proxy đang dùng và cách xác thực. Thiếu một điều là dễ cấu hình đúng cú pháp nhưng sai bản chất.

Xem phiên bản và kiểm tra libproxy

Chạy zypper --version để biết phiên bản zypper. Để biết libzypp có dùng libproxy hay không, anh em kiểm xem thư viện libproxy1 có được cài trên máy không. Mã nguồn nạp libproxy bằng cách tải động, và nếu không nạp được thì quay về đọc tệp sysconfig.

Hai nhánh này cho cùng kết quả trong trường hợp thông thường, nhưng khác nhau ở những cấu hình lạ như tệp PAC hay cài đặt desktop. Mình chỉ mô phỏng nhánh đọc tệp sysconfig trong lab, nên bài chưa kiểm nhánh libproxy.

Loại proxy và cách xác thực

Libzypp gọi libcurl, nên về nguyên tắc nó nói chuyện được với proxy HTTP mà libcurl hỗ trợ. Man page zypper không liệt kê kiểu proxy được hỗ trợ. Với proxy dịch vụ, anh em nên chọn kiểu HTTP, đặt địa chỉ dạng http://host:cổng và thử trước khi áp dụng rộng.

Mã nguồn đặt các kiểu xác thực proxy cho phép là Basic, Digest và NTLM. Proxy dịch vụ thông thường dùng Basic, nên tài khoản và mật khẩu đi theo kiểu đó. Nếu proxy xác thực bằng whitelist IP thì không cần tài khoản, và bài xác thực proxy bằng IP whitelist hay user password giải thích khi nào nên chọn hướng này.

Định dạng thông tin proxy

Nhà cung cấp thường trả proxy dạng ip:port:user:pass. Zypper cần địa chỉ dạng URL, nên anh em ghép thành http://user:pass@ip:port. Bài định dạng proxy hướng dẫn tách và ghép đúng. Nếu mật khẩu có ký tự lạ như @, # hoặc :, cần mã hóa phần trăm trong URL.

Chuẩn bị môi trường thử

Anh em nên thử trên một máy ảo hoặc một kho gói không quan trọng trước. Một cách an toàn là thêm một kho thử với tham số proxy trong URL, chạy zypper refresh cho riêng kho đó và xem proxy có nhận yêu cầu không. Cách này không đụng đến cấu hình hệ thống của các kho khác.

Cấu hình tối thiểu cho zypper proxy bằng /etc/sysconfig/proxy

Tệp /etc/sysconfig/proxy mẫu

Tệp /etc/sysconfig/proxy mẫu

Tệp mẫu trong bộ kiểm thử của libzypp cho thấy cấu trúc của /etc/sysconfig/proxy. Mình chép các khóa quan trọng. Khóa PROXY_ENABLED bật hoặc tắt toàn bộ cấu hình. Khóa HTTP_PROXY và HTTPS_PROXY đặt địa chỉ proxy cho từng scheme. Khóa FTP_PROXY dành cho FTP. Khóa NO_PROXY liệt kê các đích không dùng proxy.

PROXY_ENABLED="yes"
HTTP_PROXY="http://203.0.113.10:8080"
HTTPS_PROXY="http://203.0.113.10:8080"
FTP_PROXY=""
NO_PROXY="localhost, 127.0.0.1, noi-bo.example.com"

Mã đọc tệp (proxyinfosysconfig.cc) cho biết ba chi tiết đáng nhớ. Khóa PROXY_ENABLED coi là bật khi giá trị khác no. Proxy được chọn theo scheme của URL kho gói. Danh sách NO_PROXY được tách bằng dấu phẩy, dấu cách và dấu tab.

Bật proxy mà không bị nhầm

Khóa PROXY_ENABLED mặc định trong tệp mẫu là no. Nhiều người điền HTTP_PROXY rồi quên đổi khóa này, và zypper vẫn đi thẳng. Trong script lab, kịch bản đầu tiên cố ý để PROXY_ENABLED là no và kết quả là yêu cầu đi thẳng, không qua proxy.

Sau khi sửa tệp, anh em chạy zypper refresh. Mã nguồn libproxy có theo dõi thay đổi của tệp, nên không cần khởi động lại gì. Với nhánh đọc trực tiếp, tệp được đọc lại ở lần chạy zypper tiếp theo.

Đặt tài khoản trong HTTP_PROXY

Với proxy có tài khoản, anh em đặt tài khoản ngay trong giá trị HTTP_PROXY, dạng http://user:pass@host:cổng. Hàm điền cài đặt hệ thống trong curlhelper.cc tách phần user và pass ra khỏi URL, rồi truyền riêng cho libcurl. Nhờ vậy địa chỉ proxy gửi đi là sạch, còn tài khoản đi theo kênh xác thực.

Có một ngoại lệ đáng chú ý: nếu cài đặt trước đó đã có tên đăng nhập, mã không ghi đè lên nó. Điều này liên quan đến tham số proxyuser trong URL kho, và mình sẽ nói ở phần thứ tự ưu tiên.

Tài khoản dự phòng trong ~/.curlrc

Trong MediaCurl.cc, nếu proxy đã đặt mà chưa có tài khoản, mã tìm tùy chọn proxy-user trong tệp ~/.curlrc của user đang chạy. Nếu có, nó dùng giá trị đó. Đây là cách ngầm mà nhiều người không biết, và nó giải thích vì sao đôi khi zypper xác thực được dù tệp sysconfig không có tài khoản.

Ngược lại, nó cũng giải thích lỗi lạ: chạy zypper bằng root thì tìm ~/.curlrc của root, không phải của user thường. Anh em kiểm tệp này khi kết quả xác thực khác nhau giữa các user.

Zypper proxy với tham số proxy trong URL kho gói

Tham số trong URL là cách duy nhất để gán proxy riêng cho từng kho. Anh em dùng nó khi chỉ một kho cần đi qua proxy, hoặc khi một kho nội bộ cần đi thẳng. Cú pháp đơn giản: thêm query vào địa chỉ kho.

zypper addrepo "http://kho.example.com/suse/oss?proxy=203.0.113.10&proxyport=8080&proxyuser=user1&proxypass=matkhau" kho-thu
zypper addrepo "http://noi-bo.example.com/suse/oss?proxy=_none_" kho-noi-bo

Dòng đầu gán proxy cho kho thử. Dòng sau tắt proxy cho kho nội bộ. Libzypp xóa phần query này khỏi URL trước khi gửi yêu cầu, nên kho không nhìn thấy các tham số proxy.

Mật khẩu trong URL kho là mật khẩu để lộ

Tham số proxypass nằm ngay trong địa chỉ kho, và địa chỉ kho được lưu trong thư mục /etc/zypp/repos.d dưới dạng văn bản thường. Ai đọc được thư mục này sẽ thấy mật khẩu. Lệnh zypper lr -u cũng in ra địa chỉ đầy đủ.

Vì vậy mình chỉ dùng cách này để thử. Với máy chạy thật, proxy xác thực bằng whitelist IP hoặc cấu hình trong /etc/sysconfig/proxy với quyền đọc hạn chế sẽ ít rủi ro hơn. Nếu bắt buộc dùng URL kho, anh em đặt quyền thư mục repos.d chặt và đổi mật khẩu proxy khi đổi máy.

Thứ tự ưu tiên gộp lại

Gộp mọi thứ đã đọc từ mã nguồn, thứ tự mà libzypp áp dụng cho một yêu cầu tải là như sau. Bước thứ nhất: nếu URL kho có proxy, dùng nó và dừng. Bước thứ hai: nếu proxy bằng _none_, tắt proxy và dừng. Bước thứ ba: nếu không, hỏi cấu hình hệ thống và áp dụng NO_PROXY. Bước thứ tư: nếu vẫn không có proxy, libcurl có thể đọc biến môi trường.

Bảng: Thứ tự ưu tiên gộp lại

Nguồn cấu hình

Khi nào được dùng

Ghi chú

?proxy trong URL kho

Luôn thắng nếu có

Kèm proxyport, proxyuser, proxypass

?proxy=_none_

Tắt proxy cho kho đó

Kể cả khi hệ thống bật proxy

/etc/sysconfig/proxy

Khi PROXY_ENABLED khác no

Theo scheme, có NO_PROXY

Tài khoản trong ~/.curlrc

Khi proxy có mà chưa có tài khoản

Của user đang chạy zypper

Biến môi trường qua libcurl

Khi chưa có proxy nào

Phương án cuối

NO_PROXY trong zypper proxy: khớp theo ranh giới dấu chấm

Phần danh sách ngoại lệ của libzypp nằm trong proxyinfoimpl.h và áp dụng cho cả hai nhánh libproxy lẫn sysconfig. Quy tắc khá chặt và khác với apk hay curl ở vài điểm. Mình đọc từng điều kiện.

Điều kiện thứ nhất: nếu danh sách chỉ có đúng một dấu sao, tất cả yêu cầu đi thẳng. Điều kiện thứ hai: mỗi mục được hạ chữ thường, và dấu chấm ở đầu mục bị bỏ. Điều kiện thứ ba: host khớp khi nó kết thúc bằng mục đó và hoặc trùng cả chuỗi, hoặc ký tự đứng trước phần đuôi là một dấu chấm.

Hệ quả cho cách ghi danh sách

Ghi NO_PROXY là example.com sẽ khớp example.com và kho.example.com, nhưng không khớp badexample.com, vì ký tự trước phần đuôi không phải dấu chấm. Ghi .example.com cho kết quả tương tự, vì dấu chấm đầu bị bỏ. Đây là cách khớp an toàn hơn so với khớp hậu tố trần.

Mã không có đoạn so khớp dải CIDR như 10.0.0.0/8. Mình đọc xong hàm useProxyFor và không thấy xử lý địa chỉ mạng. Nếu anh em cần bỏ qua proxy cho cả một dải IP, hãy liệt kê từng địa chỉ hoặc dùng tham số _none_ trên từng kho.

Một lưu ý về nhánh libproxy

Một thảo luận trên diễn đàn openSUSE từng nêu câu hỏi libzypp có tôn trọng NO_PROXY trong /etc/sysconfig/proxy không. Mã hiện tại cho thấy hàm useProxyFor áp dụng danh sách ngoại lệ ở lớp chung. Mình đọc bản master trên GitHub, nên máy dùng phiên bản libzypp cũ có thể hành xử khác. Anh em kiểm bằng cách thử với một host nằm trong danh sách.

Kiểm chứng zypper proxy bằng script lab đã chạy thật

Mình viết zypper_proxy_check.py. Script đọc một tệp sysconfig mẫu, nhận một URL kho, áp dụng đúng thứ tự trong mã nguồn rồi tải thử tệp repodata/repomd.xml qua proxy HTTP lab. Proxy lab có mật khẩu, trang đích là máy chủ giả trên máy mình, và tên miền đuôi .test chỉ proxy lab phân giải được nên yêu cầu đi thẳng sẽ lỗi phân giải tên.

Script mô phỏng nhánh đọc tệp sysconfig, không phải nhánh libproxy, và không phải zypper. Nó áp dụng quy tắc khớp NO_PROXY theo ranh giới dấu chấm, như mã nguồn.

Bảy kịch bản và kết quả

Bảy kịch bản script lab

Bảy kịch bản script lab

Bảng: Bảy kịch bản và kết quả

Kịch bản

Cấu hình

Kết quả

1

PROXY_ENABLED=no

Đi thẳng, lỗi phân giải tên

2

PROXY_ENABLED=yes, tài khoản trong HTTP_PROXY

200 qua proxy

3

NO_PROXY chứa tên host kho

Đi thẳng, lỗi phân giải tên

4

Sai mật khẩu

407

5

Proxy không kèm tài khoản

407

6

?proxy, proxyport, proxyuser, proxypass trong URL, sysconfig tắt

200 qua proxy

7

?proxy=_none_ khi sysconfig bật

Đi thẳng, lỗi phân giải tên

Nhật ký phía proxy xác nhận bốn yêu cầu đến từ các kịch bản 2, 4, 5 và 6. Kịch bản 2 và 6 ghi nhận tên đăng nhập user1 và xác thực thành công. Kịch bản 4 có tên đăng nhập nhưng xác thực sai. Kịch bản 5 không có tiêu đề xác thực nào. Ba kịch bản đi thẳng không để lại dấu vết ở proxy, đúng như dự kiến.

PROXY_ENABLED=no đủ để vô hiệu cả tệp sysconfig. Một tệp điền đầy đủ mà khóa này sai vẫn khiến zypper đi thẳng.

Bẫy mật khẩu có ký tự lạ

Mật khẩu của proxy lab có chứa @ và #. Trong tệp sysconfig mẫu mình mã hóa chúng thành %40 và %23, và script giải mã trước khi gửi. Nếu anh em dán mật khẩu thô vào URL, ký tự @ sẽ bị hiểu là dấu ngăn giữa tài khoản và host, và địa chỉ proxy bị đọc sai.

Mình chưa kiểm cách libzypp giải mã phần trăm thật, nhưng mã nguồn lấy tên đăng nhập và mật khẩu từ URL ở dạng đã mã hóa rồi truyền qua curlUnEscape, nên hướng mã hóa phần trăm là đúng. Anh em thử với một mật khẩu có ký tự lạ trước khi áp dụng.

Phạm vi của kết quả

Có năm điểm mình chưa kiểm. Điểm thứ nhất là nhánh libproxy. Điểm thứ hai là việc libcurl đọc biến môi trường khi chưa có proxy. Điểm thứ ba là kết nối https qua phương thức CONNECT. Điểm thứ tư là các kiểu xác thực Digest và NTLM. Điểm thứ năm là thông báo cụ thể zypper in ra khi proxy trả 407. Cả năm cần chạy trên máy SUSE thật.

Lỗi thường gặp khi chạy zypper proxy

Bảng lỗi zypper khi dùng proxy

Bảng lỗi zypper khi dùng proxy

Bảng dưới gom triệu chứng và nguyên nhân có thể. Nguyên nhân suy từ mã nguồn và kết quả lab. Mình chưa tái hiện từng thông báo trên SUSE thật, nên cột triệu chứng là hướng tìm lỗi, không phải bản sao thông báo.

Bảng: Lỗi thường gặp khi chạy zypper proxy

Triệu chứng

Nguyên nhân có thể

Cách kiểm

zypper refresh báo lỗi kết nối

Proxy không được áp dụng

Xem PROXY_ENABLED, chạy với tùy chọn -v

Proxy thấy yêu cầu nhưng trả 407

Thiếu hoặc sai tài khoản

Kiểm tài khoản trong HTTP_PROXY và ~/.curlrc của root

Kho này qua proxy, kho kia không

Có ?proxy hoặc ?proxy=_none_ trong URL

Chạy zypper lr -u

Kho nội bộ vẫn qua proxy

NO_PROXY không khớp theo ranh giới dấu chấm

Ghi đúng tên miền

Dải IP trong NO_PROXY không có tác dụng

Mã không xử lý CIDR

Liệt kê từng host

Chạy bằng sudo mất cấu hình

Biến môi trường không sang tiến trình root

Dùng tệp sysconfig

Đổi tệp mà không có hiệu lực

Dùng nhánh libproxy hoặc bản libzypp cũ

Kiểm phiên bản, chạy lại zypper

Phân biệt lỗi proxy với lỗi chữ ký GPG

Khi zypper báo lỗi về chữ ký hoặc khóa, đó không phải lỗi proxy. Man page mô tả zypper xác thực metadata kho bằng chữ ký GPG theo thiết lập trong /etc/zypp/zypp.conf. Lỗi loại này xuất hiện sau khi tải thành công, nghĩa là proxy đã làm xong phần việc.

Man page cũng cảnh báo rõ: tắt kiểm tra GPG không được khuyến nghị, vì nhận dữ liệu không có chữ ký hoặc chữ ký sai có thể gây hỏng hệ thống. Đừng tắt kiểm tra để chữa lỗi mạng.

Dùng tùy chọn verbose để quan sát

Man page liệt kê tùy chọn -v, --verbose ở mức toàn cục. Nó làm zypper in thêm thông tin trong lúc chạy. Với lỗi mạng, kết hợp -v với phía nhật ký của proxy là cách nhanh nhất để thấy yêu cầu có tới proxy hay không.

Nếu proxy của anh em không có nhật ký, hãy dựng một proxy thử trên máy mình trước, như squid hoặc script lab, rồi chuyển sang proxy dịch vụ khi đã chắc cấu hình đúng. Đổi hai thứ cùng lúc thì rất khó biết lỗi từ đâu.

Zypper proxy trong container và tự động hóa

Trên openSUSE, nhiều image container dùng zypper bên trong. Lệnh zypper install trong Dockerfile đọc cấu hình của chính container đó, không đọc cấu hình của máy chủ chạy Docker. Anh em cần truyền proxy vào container bằng cơ chế của Docker, rồi đảm bảo zypper nhìn thấy nó.

Vì zypper ưu tiên tệp sysconfig và tham số URL, biến môi trường truyền vào container chỉ có tác dụng ở tầng cuối. Nếu image đã có tệp /etc/sysconfig/proxy bật proxy với giá trị khác, giá trị đó thắng. Bài cấu hình proxy cho Docker nói về phía Docker, còn bài này nói về phía zypper.

Công cụ cấu hình tự động

Khi quản lý nhiều máy bằng công cụ như Ansible hay Salt, cách gọn là quản lý tệp /etc/sysconfig/proxy như một tệp cấu hình bình thường. Tệp ngắn, định dạng khóa và giá trị, và dễ đặt bằng mẫu. Giữ mật khẩu proxy trong kho bí mật của công cụ, đừng ghi vào mẫu công khai.

Nếu chỉ một vài kho cần proxy, dùng tham số ?proxy trong URL sẽ gọn hơn, nhưng như đã nói, mật khẩu nằm trong tệp .repo. Với tự động hóa, proxy xác thực bằng whitelist IP tránh được vấn đề này vì không có bí mật nào để lưu.

So sánh nhanh với curl

Libzypp dùng libcurl, và bài curl proxy là gì giải thích cách curl đọc biến môi trường. Điểm khác quan trọng: curl đọc biến môi trường trước, còn zypper ưu tiên tham số URL và tệp sysconfig, chỉ dùng biến môi trường khi cả hai trống. Một lệnh curl chạy được không có nghĩa zypper sẽ chạy được với cùng cấu hình.

Gỡ cấu hình thử và quản lý bí mật khi dùng zypper proxy

Sau khi thử, anh em dọn dẹp theo thứ tự ngược lại với lúc thiết lập. Với kho thử, xóa bằng zypper removerepo. Với tệp sysconfig, đặt PROXY_ENABLED về no hoặc xóa giá trị HTTP_PROXY. Với ~/.curlrc, xóa dòng proxy-user nếu bạn đã thêm.

Mật khẩu proxy là bí mật. Đừng để nó trong tệp .repo có quyền đọc rộng, đừng in ra nhật ký tự động hóa và đừng gõ nó trong dòng lệnh nếu shell lưu lịch sử. Khi nghi ngờ mật khẩu đã lộ, đổi nó ở trang quản lý proxy và cập nhật các máy một lượt.

Cần proxy HTTP có tài khoản hoặc whitelist IP để chạy các bước trên, anh em có thể mua proxy Việt Nam tại ProxyVN: proxy dân cư tĩnh Viettel, VNPT, FPT, datacenter Việt Nam và Mỹ, 4G và proxy xoay. Nhà cung cấp hỗ trợ HTTP và SOCKS5.

Một quy trình thử gọn cho máy chưa có gì

Với một máy mới, mình thường làm theo bốn bước. Bước một: thêm kho thử có tham số proxy trong URL và chạy refresh riêng kho đó, để biết proxy dịch vụ nhận tài khoản. Bước hai: nếu chạy được, chuyển cấu hình sang tệp sysconfig và xóa tham số khỏi URL kho. Bước ba: đặt NO_PROXY cho kho nội bộ và thử lại một kho trong danh sách đó. Bước bốn: chạy một lệnh cài gói thật và xem nhật ký proxy lần cuối.

Làm từng bước như vậy mất khoảng vài phút, nhưng mỗi bước chỉ thay một thứ nên khi lỗi xuất hiện anh em biết ngay thủ phạm. Đổi nhiều thứ cùng lúc là nguyên nhân phổ biến nhất khiến việc gỡ lỗi proxy kéo dài hàng giờ.

Checklist trước khi dùng thật

  • Ghi lại phiên bản zypper và biết máy có dùng libproxy hay không.
  • Đặt PROXY_ENABLED đúng giá trị và nhớ nó là khóa bật tắt tổng.
  • Chọn kiểu proxy HTTP và thử trước với một kho thử.
  • Mã hóa phần trăm mật khẩu có ký tự lạ trong URL.
  • Ghi NO_PROXY bằng tên miền, không dùng dải CIDR.
  • Kiểm ~/.curlrc của user chạy zypper nếu kết quả xác thực khác nhau.
  • Xem nhật ký phía proxy để chắc yêu cầu thật sự đi qua.
  • Dọn kho thử và cấu hình tạm sau khi xong.

Zypper proxy: câu hỏi thường gặp

Zypper proxy đọc cấu hình ở đâu. Theo mã libzypp, thứ tự là tham số proxy trong URL kho, rồi cấu hình hệ thống (libproxy hoặc tệp /etc/sysconfig/proxy), rồi biến môi trường qua libcurl. Nơi nào có kết quả trước thì thắng.

Làm sao tắt proxy cho một kho. Thêm tham số proxy với giá trị _none_ vào URL kho, ví dụ ?proxy=_none_. Kho đó đi thẳng dù hệ thống bật proxy.

Đặt HTTP_PROXY mà zypper vẫn đi thẳng. Kiểm PROXY_ENABLED trước, vì giá trị no vô hiệu cả tệp. Sau đó kiểm host kho có nằm trong NO_PROXY không.

NO_PROXY có dùng được dải IP không. Mã nguồn không xử lý CIDR. Anh em liệt kê từng host hoặc từng tên miền.

Zypper có dùng được SOCKS5 không. Man page không liệt kê, và mình chưa thử. Một thảo luận trên diễn đàn có nhắc câu hỏi này nhưng mình không dùng làm căn cứ. Cách an toàn là dùng proxy HTTP.

Mật khẩu proxy nên đặt ở đâu. Tệp /etc/sysconfig/proxy với quyền đọc hạn chế, hoặc dùng whitelist IP để khỏi có mật khẩu. Tránh đặt trong URL kho vì tệp .repo lưu dạng văn bản.

Có cần khởi động lại gì sau khi sửa tệp sysconfig không. Không cần dịch vụ nào. Chạy lại zypper là đủ, vì mỗi lần chạy zypper đọc cấu hình từ đầu.

Zypper proxy và những điều cần nhớ

Zypper proxy chọn proxy theo thứ tự tham số trong URL kho, tệp /etc/sysconfig/proxy rồi biến môi trường, và PROXY_ENABLED phải khác no thì tệp mới có tác dụng. Thử trên một kho thử, xem nhật ký phía proxy và dọn cấu hình sau khi xong. Cần proxy HTTP ổn định, liên hệ Proxy.vn - Nhà cung cấp dịch vụ proxy chất lượng hàng đầu Việt Nam cho zypper proxy.

TIN TỨC LIÊN QUAN