Opensuse

意外的 squid 行為(openSUSE 更新記憶體)

  • April 20, 2014

由於沒有以前的經驗,我剛剛設置了一個squid代理。其唯一目的是防止所有 Linux 系統 (openSUSE) 從 Internet 下載其更新。

可以為 openSUSE 更新工具輕鬆配置代理。tcpdump顯示其他系統訪問代理,代理訪問儲存庫。

我不明白的是:在發行版升級後,第一次線上更新應該是 400 MiB 到 700 MiB(這是 YaST 在開始更新之前所說的)。但squid儲存目錄僅包含大約 80 MiB 數據。

這些access.log節目既成功又失敗。即使由於某些奇怪的原因,Linux 系統會訪問不同的伺服器(是否存在某種 DNS 不透明重定向?),但我希望代理儲存至少與最大下載量一樣大。

儲存庫http不是,https因此代理不應該有問題。

發現問題

此答案中的此連結提供了為什麼 squid 在此處無法正常工作的資訊:

包是使用分散在多個鏡像上的分段下載來下載的,這使得 squid 無法進行大量記憶體。

我找到了本教程:如何使用 Squid 記憶體 openSUSE 儲存庫

摘抄

如何使您的本地 Squid Web 記憶體與 openSUSE 儲存庫和 openSUSE 網路安裝過程一起使用。實際上,如何執行完全自主的本地按需儲存庫鏡像。即使使用高速 ADSL 網際網路連接,也可以輕鬆實現高達 60% 的節省。

以下是該文章的分步詳細資訊。

一步步

  1. 烏賊

Squid web-proxy 是這個設置中的關鍵元素,所以一個工作的 Squid 安裝是先決條件。設置 Squid 並不像看起來那麼複雜,但是您必須查閱 squid 文件,這超出了本文的範圍。您是否喜歡使用環境變數 http_proxy 等直接訪問,或者如果您執行透明代理(就像我一樣),並不重要。

**注意:**這裡的設置適用於 Squid 2.7,我認為 storeurl_rewrite 功能尚未在 Squid 3.x 中實現。 2. 傑瑞德

jesred 是 URL 重寫器。它相當成熟,但功能齊全。(原始網頁)。我必須進行一些更改以使其與squid 2.7完全兼容:

tar xzvf <tarball>
cd jesred-1.3
make

安裝:完成後,將二進制 jesred 複製到/usr/local/bin您自己的二進製文件的首選位置。

jesred 的配置文件:/etc/squid/jesred.conf

allow = /etc/squid/redirector.acl
rules = /etc/squid/opensuse-redirect.rules
redirect_log = /var/log/squid/redirect.log
rewrite_log = /var/log/squid/rewrite.log

使用/etc/squid/redirector.acl您可以控制重寫器應該處理哪些客戶端的請求,但我發現使用 Squid 的 ACL 和 storeurl_access 指令實際上更容易控制,所以我為所有客戶端啟用:

# rewrite all URLs from
0.0.0.0/0
  1. /etc/squid/squid.conf

配置:將以下行添加到/etc/squid/squid.conf storeurl_rewrite_program /usr/bin/jesred storeurl_rewrite_children 5

acl metalink req_mime_type application/metalink4+xml
storeurl_access deny metalink 

storeurl_access allow localnet
storeurl_access allow localhost

acl localhost src 127.0.0.0/8
acl localnet src 192.168.0.0/16
  1. fetcher206 日誌文件

修改/etc/squid/squid./conf如下:

logformat f206 %{%Y-%m-%dT%H:%M:%S}tl %Ss/%03Hs %rm %ru %mt
access_log /var/log/squid/fetch206.log f206

fetcher206 將讀取此日誌。

為防止它變得太大,請將以下內容添加到/etc/logrotate.d/

/var/log/squid/fetch206.log {
  compress
  dateext
  maxage 365
  rotate 5
  size=+4M
  notifempty
  missingok
  create 640 squid root
  sharedscripts
  postrotate
   /etc/init.d/squid reload
  endscript
}
  1. 魷魚延遲池

這是一個可選步驟 - 根據您可用的下游頻寬,您可能希望限制 fetcher206 用於檢索儲存庫文件的內容。這可以防止

  • 減慢目前的安裝速度和
  • 濫用網際網路連接
delay_pools 1
delay_class 1 1
delay_access 1 allow localhost
delay_parameters 1 1000000/1000000

將上述內容添加到 /etc/squid/squid.conf - 它定義了一個 delay_pool,只能從 localhost(這是 fetcher206 將執行 wget 的地方)訪問,最大頻寬為 1MByte/sec。

如果您有其他來自 localhost 的 http/proxy 流量,您可以添加另一個 127.0.0.x 地址,並將其專門用於 fetcher206。 6. 鏡像數據庫

我們需要一個可用的 openSUSE 鏡像的目前列表。這可以從 mirrors.opensuse.org 中檢索。目前,我使用 XSL 來解析 HTML 頁面,但我希望直接從 MirrorBrain 轉移到一個適當格式的列表。

mkdir -p /var/lib/fetcher206
cp tarball/Makefile.mirrors /var/lib/fetcher206/Makefile
cp tarball/extract* /var/lib/fetcher206/
make -C /var/lib/fetcher206
cp tarball/opensuse_mirrors.cron /etc/cron.d/opensuse_mirrors
  1. 重新載入魷魚

當你走到這一步時,是時候重新載入魷魚了

squid -k reconfigure
  1. 抓取器206

fetcher206 目前是一個 PHP 腳本。只需將其複製到 /usr/bin 即可安裝它。它有一些硬編碼選項,例如同時執行的 wget 數量、日誌文件的名稱等。

fetcher206 還沒有 systemd 服務單元,也沒有 LSB 初始化腳本。目前,您只需從以下內容開始:

startproc -s -q /usr/bin/fetcher206

參考

引用自:https://unix.stackexchange.com/questions/125606