Частное безопасное хранилище генерирует ошибку «Не удалось получить», возможно, неправильно

TL; DR версия: Я настраиваю безопасное хранилище apt с подписанным файлом Release, и оно дает мне сообщение об ошибке «Failed to fetch Release», которое полностью исчезает, когда я удаляю Файл Release.gpg. Я могу подтвердить, что apt получает файл Release, даже когда говорит, что не может.

Моя организация нуждается в локальном репозитории secure-apt, где мы разместим нашу собственную копию обновлений для Ubuntu 12.04. Необходимость возникает по ряду причин (пропускная способность, предварительное тестирование обновлений перед выпуском в производство, все обычное.) В процессе создания репозитория я столкнулся с необычной проблемой.

1113 Во-первых, основы. Репозиторий apt размещается на небольшом рабочем столе под управлением CentOS 6.5, а не на сервере; в настоящее время это доказательство концепции. Я использую nginx для работы в качестве веб-сервера и виртуальную машину Ubuntu 12.04 в качестве тестовой площадки для проверки концепции. Я сделал резервную копию /etc/apt/sources.list, затем удалил ее и начал с нуля. В настоящее время он содержит только:

cat /etc/apt/sources.list

# Test repository for local private apt

deb http://mbwinnc641090/ precise main

Структура каталогов была скопирована из существующих репозиториев Ubuntu apt для Precise. Файлы Release и Release.gpg находятся в / dists / точный (где / относится к корню веб-сервера, а не к файловому серверу); Packages, Packages.gz и Packages.bz2 находятся в / dists / Precision / Main / binary-amd64. Есть пакеты в / dists / точные / основные / двоичные-i386; он не отображается в Release.gpg, его размер равен 0 байт, и он был добавлен только для решения вторичной проблемы, которая возникла, когда я смотрел на реальную проблему (более подробно объясню ниже). Я сгенерировал 4096 RSA / 4096 RSA ключом с OpenGPG, и я подписал файл релиза с:

gpg -abs -o Release.gpg Release

Я экспортировал открытый ключ с помощью

gpg --armor --output ./APT-key-2.key --export <myid>

скопировал его на флешку USB и затем принес это к ВМ; ключ успешно импортирован на виртуальную машину Ubuntu с

apt-key add ./APT-key-2.key

Содержимое файла Release выглядит следующим образом:

Origin: Ubuntu
Label: Ubuntu
Suite: precise
Version: 12.04
Codename: precise
Date: Wed, 25 Apr 2012 22:49:23 UTC
Architectures: amd64
Components: main restricted universe multiverse
Description: Ubuntu Precise 12.04
MD5Sum:
3a72e2cbeccb018e855e59851c97fafb        1806 main/binary-amd64/Packages
4e8e2385e95080b1c6e61ea032f286af        1023 main/binary-amd64/Packages.bz2
871b13afb486f3faf4174e3c839ad6da         938 main/binary-amd64/Packages.gz
SHA1:
d58e402014879a2d7f9a8890144daf8d05216bc0        1806 main/binary-amd64/Packages
5782287bf8d853da47425dbf15aaf924a4505e1d        1023 main/binary-amd64/Packages.bz2
c469ea854a1f15638fcff418e4ca527bb3a12a52         938 main/binary-amd64/Packages.gz
SHA256:
ec3f7712fecf94de2337a0c554219f370ed2ddb4486e1e1cc147f90fb4b5d765        1806 main/binary-amd64/Packages
5776bcdc534063094459f283619c85861758bae3718273ce6e34b6e052f9a495        1023 main/binary-amd64/Packages.bz2
5c0eedc77ff872f2676c79116e55182e759cb8c41285a49bae075a7ea08f9942         938 main/binary-amd64/Packages.gz

Как видите, он содержит записи MD5Sum, SHA1 и SHA256 для Файлы main / binary-amd64 / Packages, Packages.bz2 и Packages.gz. Я дважды и трижды проверил, что это правильно.

Файлы пакета содержат только одну запись пакета (опять же, подтверждение концепции - начните с малого и работайте) для Firefox. Это долго, и я не верю, что это имеет отношение к проблеме, поэтому я пока опущу ее, но если кто-то захочет это увидеть, я отредактирую ее позже.

Теперь актуальная проблема - когда запускается apt-get, он жалуется на невозможность получить файл Release:

sudo apt-get -s --allow-unauthenticated update
[sudo] passwd for administrator:

Hit http://mbwinnc641090 precise Release.gpg
Hit http://mbwinnc641090 precise Release
W: Failed to fetch http://mbwinnc641090/dists/precise/Release  Unable to find expected entry 'main/binary-amd64/Packages' in Release file (Wrong sources.list entry or malformed file)

Однако я могу со 100% уверенностью подтвердить, что это не не удалось вытащить файл Release вниз. Во-первых, файлы журнала nginx подтверждают, что запрос apt получает оба файла; access.log сообщает о переносах HTTP 304 и 0 байтов (т. е. без изменений с момента получения последней копии файла), или, если я коснусь обоих файлов в репозитории, HTTP 200 и размеры переноса обоих файлов будут правильными:

Нет касания:

10.113.226.222 - - [21/Feb/2014:08:12:12 -0600] "GET /dists/precise/Release.gpg HTTP/1.1" 304 0 "-" "Debian APT-HTTP/1.3 (0.8.16~exp12ubuntu10.14)" "-"
10.113.226.222 - - [21/Feb/2014:08:12:12 -0600] "GET /dists/precise/Release HTTP/1.1" 304 0 "-" "Debian APT-HTTP/1.3 (0.8.16~exp12ubuntu10.14)" "-"

Касание:

10.113.226.222 - - [21/Feb/2014:10:05:04 -0600] "GET /dists/precise/Release.gpg HTTP/1.1" 200 836 "-" "Debian APT-HTTP/1.3 (0.8.16~exp12ubuntu10.14)" "-"
10.113.226.222 - - [21/Feb/2014:10:05:04 -0600] "GET /dists/precise/Release HTTP/1.1" 200 966 "-" "Debian APT-HTTP/1.3 (0.8.16~exp12ubuntu10.14)" "-"

Оба файла передаются в виде открытого текста; Я добавил директиву default_type text / plain в файл conf для сервера nginx (примечание - весь сервер, а не только этот виртуальный хост).

Я также могу подтвердить, что apt-get получает файлы - / var / lib / apt / lists содержит mbwinnc641090_dists_precise_Release и mbwinnc641090_dists_precise_Release.gpg; содержимое файла точно соответствует содержимому сервера; размер файла точно соответствует тому, что находится на сервере (и что передается в соответствии с nginx); и метка времени файла изменяется, чтобы соответствовать времени сервера, когда я касаюсь обоих файлов на сервере. wget также успешно получает доступ к файлам, и я могу просматривать их напрямую в Chrome / Firefox / etc. Так что они там и доступны.

Что действительно странно, так это то, что когда я удаляю Release.gpg из каталога (перемещаю его в другой каталог или переименовываю), внезапно работает команда обновления apt-get. Там нет ничего для обновления (и первоначально он жаловался на невозможность найти пакеты в / dists / Precision / Main / binary-i386, который исчез, когда я создал там пустой файл Packages), но сообщение об ошибке не возможность удаления Release полностью исчезает и завершается с нулевым кодом ошибки. Так что похоже на то, что в apt не нравится подпись, которую я имею. Однако я могу подтвердить, что gpgv может проверить подпись, используя набор ключей apt:

sudo gpgv --keyring /etc/apt/trusted.gpg mbwinnc641090_dists_precise_Release.gpg mbwinnc641090_dists_precise+Release
gpgv: Signature made Fri 21 Feb 2014 10:04:56 AM CST using RSA key ID AF57B06B
gpgv: Good Signature from "<my info>"

Запуск apt get с помощью «-o Debug :: Acquire :: gpgv = true» еще раз подтверждает, что Apt проходит ключевой этап проверки - apt-get return:

Hit http://mbwinnc641090 precise Release.gpg
Hit http://mbwinnc641090 precise Release
33% [Release gpgv 966 B]inside VerifyGetSigners
gpgv path: /usr/bin/gpgv
Keyring file: /etc/apt/trusted.gpg
Keyring path: /etc/apt/trusted.gpg.d/
Preparing to exec: /usr/bin/gpgv /usr/bin/gpgv --ignore-time-conflict --status-fd 3 --keyring /etc/apt/trusted.gpg /var/lib/apt/lists/partial/mbwinnc641090_dists_precise_Release.gpg /var/lib/apt/lists/mbwinnc641090_dists_precise_Release
Read: [GNUPG:] SIG_ID sLGwzAAcePo9LZtAdgNf44grYaQ 2014-02-21 1392998696
Read: [GNUPG:] GOODSIG 84332B63AF57B06B <myinfo>
Got GOODSIG, key ID:GOODSIG 84332B63AF57B06B
Read: [GNUPG:] VALIDSIG 09DBAF28ACFD21DC5FBF797784332B63AF57B06B 2014-02-21 1392998696 0 4 0 1 2 00 09DBAF28ACFD21DC5FBF797784332B63AF57B06B
gpgv exited
gpgv succeeded
W: Failed to fetch http://mbwinnc641090/dists/precise/Release  Unable to find expected entry 'main/binary-amd64/Packages' in Release file (Wrong sources.list entry or malformed file)

E: Some index files failed to download.  They have been ignored, or old ones used instead.

Так что в основном - у меня нет идей. Любая помощь вообще будет оценена; Я уверен, что на данный момент это просто невероятно глупая простая вещь, которую я пропустил, и вы все посмеетесь, но я совершенно отсталый.

0
задан 22 February 2014 в 00:40

1 ответ

Проблема очень, очень тонкая.

Все хеш-строки должны иметь пробел перед ними. Например, это:

MD5Sum:
3a72e2cbeccb018e855e59851c97fafb        1806 main/binary-amd64/Packages
4e8e2385e95080b1c6e61ea032f286af        1023 main/binary-amd64/Packages.bz2
871b13afb486f3faf4174e3c839ad6da         938 main/binary-amd64/Packages.gz

должно быть:

MD5Sum:
 3a72e2cbeccb018e855e59851c97fafb        1806 main/binary-amd64/Packages
 4e8e2385e95080b1c6e61ea032f286af        1023 main/binary-amd64/Packages.bz2
 871b13afb486f3faf4174e3c839ad6da         938 main/binary-amd64/Packages.gz
0
ответ дан 22 February 2014 в 00:40

Другие вопросы по тегам:

Похожие вопросы: