2015-09-21 2 views
0

Существует среда разработки и производства. В каждом есть репозиторий Debian. Например, http://dev и http://prod.apt-get подавить предупреждение о недостающем репо

Когда машина передается (физически) в производственную среду, как избежать изменения /etc/apt/sources.list?

Одно решение написать как:

deb http://dev/debian main 
deb http://prod/debian main 

Это нормально, чтобы иметь предупреждение о недоступных http://prod/ в среде Dev. Но как избавиться от предупреждения в производственной сети?

ответ

0

Существует аккуратное зеркало. В /etc/apt/sources.list:

deb mirror://localhost/mirrors.txt jessie main 

И в mirrors.txt размещенных на той же машине:

http://dev/debian 
http://prod/debian 

Таким образом, он будет найти хранилище в каждом конфиге.

Но он все равно жалуется. Я отправлю сценарий:

#!/bin/bash 

# Generates a list of available repositories. 

set -e 

release_codename="$(lsb_release -cs)" 

all_mirrors_list=/etc/locate-my-repositories/all-my-mirrors.list 
active_list=/var/lib/locate-my-repositories/my.list 

mirrors="$(cat "$all_mirrors_list")" 

active=$(for r in $mirrors; do 
    if curl -s "$r"/dists/"$release_codename"/main/binary-"$(dpkg --print-architecture)"/Release | grep -q '^Component:'; then 
     printf '%s\n' "$r" 
    fi 
done) 

# Formats a valid /etc/apr/sources.list: makes "deb http://url jessie main" 
# entry from "http://url". 
function to_sources_list() { 
    sed "s/\(.*\)/deb \\1 $release_codename main/" 
} 

if [ -z "$active" ]; then 
    # Nothing is found. Give everything to apt-get, maybe it will be more lucky. 
    cat "$all_mirrors_list" 
else 
    printf '%s\n' "$active" 
fi | to_sources_list > "$active_list"