Esta é outra forma e a mais correta de criar um repositório Debian ou suas distribuições derivadas como o Ubuntu.

O Local Exato

O local exato deve seguir esta hierarquia: root/dists/stable/main/binary-i386/:

.
|-- dists/
|   `-- stable/
|       |-- Release
|       |-- Release.gpg
|       `-- main/
|           `-- binary-i386
|               |-- Packages.gz
|               `-- Release
`-- pool/

No qual dists e binary-i386 são nomes imutáveis. Escolha substituir root por qualquer nome (ubuntu, debian, labs, …) ou nem colocar e stable e main conforme a sua necessidade, poderia ser por exemplo: hardy e main ou intrepid e universe.

Procurar os pacotes

Coloque todos os pacotes em pool, independente da hierarquia (pode ter os diretórios e subdiretórios que quiser).

Agora entre em root e, conforme a hierarquia, execute:

$ dpkg-scanpackages pool /dev/null | gzip > dists/stable/main/binary-i386/Packages.gz

Pacotes duplicados serão desconsiderados e somente uma versão será usada.

O Arquivo Release

Para finalizar crie um arquivos Release e coloque um diretório acima de binary-i386, no meu exemplo seria em main, semelhante a esse:

Archive: stable
Component: main
Origin: Ubuntu
Lable: dmitryrck
Architecture: all

E mais o md5sum com o tamanho em bytes dos arquivos Packages.gz:

$ for file in $( find . -type f -name Packages.gz );
for> do
for> MD5=$(md5sum $file|cut -d ' ' -f1) \
for> DU=$(du -sb $file | cut -f1 ) \
for> echo "$MD5 $DU $file"
for> done >> Release

O Arquivo Release.gpg

Com sua chave de criptografia assine o arquivos Release. Entre na pasta que está o arquivo Release e:

$ gpg --output Release.gpg -ba Release