ฉันต้องการสร้างที่เก็บในเครื่องของฉันเองบน LAN ของฉันเพื่อให้เครื่องบน LAN สามารถอัปเดตและอัปเกรดได้ ฉันต้องการดาวน์โหลดแพ็คเกจและเก็บไว้ในเซิร์ฟเวอร์ในพื้นที่ของฉันเพื่อให้ฉันสามารถอัปเกรดอัปเกรดติดตั้งและอื่น ๆ ได้โดยไม่ต้องใช้อินเทอร์เน็ต
ฉันต้องการสร้างที่เก็บในเครื่องของฉันเองบน LAN ของฉันเพื่อให้เครื่องบน LAN สามารถอัปเดตและอัปเกรดได้ ฉันต้องการดาวน์โหลดแพ็คเกจและเก็บไว้ในเซิร์ฟเวอร์ในพื้นที่ของฉันเพื่อให้ฉันสามารถอัปเกรดอัปเกรดติดตั้งและอื่น ๆ ได้โดยไม่ต้องใช้อินเทอร์เน็ต
คำตอบ:
มี 4 ขั้นตอนในการตั้งค่าที่เก็บง่าย ๆ สำหรับคุณ
1.Install
dpkg-dev
2. ใส่แพ็คเกจในไดเรกทอรี
3. สร้างสคริปต์ที่จะสแกนแพ็กเกจและสร้างไฟล์ apt-get update สามารถอ่านได้
4. เพิ่มบรรทัดลงในแหล่งที่มาของคุณรายการที่ชี้ไปยังที่เก็บของคุณติดตั้ง dpkg-dev
พิมพ์เทอร์มินัล
sudo apt-get install dpkg-dev
สารบบ
สร้างไดเรกทอรีที่คุณจะเก็บแพ็คเกจของคุณ สำหรับตัวอย่างนี้เราจะใช้
/usr/local/mydebs.
sudo mkdir -p /usr/local/mydebs
ตอนนี้ย้ายแพ็คเกจของคุณไปยังไดเรกทอรีที่คุณเพิ่งสร้างขึ้น
โดยทั่วไปแพคเกจที่ดาวน์โหลดมาจะถูกเก็บไว้ในระบบของคุณใน
/var/cache/apt/archives
ไดเรกทอรี หากคุณติดตั้ง apt-cacher คุณจะมีแพ็คเกจเพิ่มเติมที่เก็บไว้ในไดเรกทอรี / แพ็คเกจสคริปต์ปรับปรุง -dedebs
มันเป็นสามซับง่าย:
#! /bin/bash cd /usr/local/mydebs dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
ตัดและวางด้านบนลงใน gedit และบันทึกเป็น update-mydebs ใน ~ / bin (tilde '~' หมายถึงโฮมไดเร็กตอรี่ของคุณถ้าไม่มี / bin ให้สร้าง: อูบุนตูจะใส่ไดเร็กตอรี่นั้นไว้ใน PATH ของคุณมันเป็นที่ที่เหมาะสำหรับใส่สคริปต์ส่วนบุคคล) ถัดไปทำให้สคริปต์สามารถดำเนินการได้:
chmod u+x ~/bin/update-mydebs How the script works:
dpkg-scanpackagesดูแพ็คเกจทั้งหมดใน mydebs และผลลัพธ์ถูกบีบอัดและเขียนไปยังไฟล์ (Packages.gz) ที่ apt-get update สามารถอ่านได้ (ดูด้านล่างสำหรับการอ้างอิงที่อธิบายสิ่งนี้ในรายละเอียดที่น่าตื่นเต้น) / dev / null เป็นไฟล์ว่างเปล่า; มันเป็นการทดแทนไฟล์แทนที่ซึ่งเก็บข้อมูลเพิ่มเติมเกี่ยวกับแพ็คเกจซึ่งในกรณีนี้ไม่จำเป็นต้องใช้จริงๆ ดู deb-override (5) หากคุณต้องการทราบ
sources.list
เพิ่มบรรทัด
deb file:/usr/local/mydebs ./
ไปยัง /etc/apt/sources.list ของคุณและคุณทำเสร็จแล้ว
ตัวเลือกซีดี
คุณสามารถเขียนไดเร็กตอรี่ที่มี debs ไปยัง CD และใช้มันเป็นที่เก็บได้เช่นกัน (เหมาะสำหรับการแชร์ระหว่างคอมพิวเตอร์) ในการใช้ซีดีเป็นแหล่งเก็บข้อมูล
sudo apt-cdrom add
การใช้พื้นที่เก็บข้อมูล
เมื่อใดก็ตามที่คุณใส่ deb ใหม่ในไดเรกทอรี mydebs ให้เรียกใช้
sudo update-mydebs sudo apt-get update
ตอนนี้แพ็กเกจโลคัลของคุณสามารถจัดการได้ด้วยคำสั่ง Synaptic, aptitude และ apt: apt-get, apt-cache ฯลฯ เมื่อคุณพยายามติดตั้ง apt-get การพึ่งพาใด ๆ จะได้รับการแก้ไขตราบใดที่สามารถตอบสนองได้ .
แพ็คเกจที่ทำไม่ถูกต้องอาจล้มเหลว แต่คุณจะไม่ต้องทนอยู่กับ dpkg
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
ได้ไหม สิ่งที่/dev/null
ทำมี ฉันอ่าน man page ด้วย แต่ก็ไม่ชัดเจน
* เพื่อสร้างที่เก็บออฟไลน์ผ่าน LAN *
ติดตั้ง Local Apache Webserver
# apt-get install apache2
ตามค่าเริ่มต้นแพ็คเกจ Apache ของ Debian จะตั้งค่าเว็บไซต์ภายใต้/var/www
ระบบของคุณ สำหรับวัตถุประสงค์ของเราก็ไม่เป็นไรดังนั้นจึงไม่มีเหตุผลที่จะทำอะไรอีก คุณสามารถทดสอบได้อย่างง่ายดายโดยชี้เบราว์เซอร์ที่http://localhost
คุณชื่นชอบที่คุณควรเห็นหน้าเว็บหลังการติดตั้งเริ่มต้นซึ่งถูกจัดเก็บจริงใน/var/www/index.html
สร้างไดเรกทอรีเก็บแพคเกจ Debian
เลือกที่จะสร้างไดเรกทอรี/var/www/debs
สำหรับสิ่งนี้. ภายใต้นั้นคุณควรสร้างไดเรกทอรี "สถาปัตยกรรม" หนึ่งรายการสำหรับแต่ละสถาปัตยกรรมที่คุณต้องการสนับสนุน หากคุณใช้คอมพิวเตอร์เพียงเครื่องเดียว (หรือประเภทคอมพิวเตอร์) คุณจะต้องใช้เพียงเครื่องเดียว - โดยทั่วไปคือ "i386" สำหรับระบบ 32 บิตหรือ "amd64" สำหรับ 64 บิต หากคุณกำลังใช้สถาปัตยกรรมอื่นฉันจะสมมติว่าคุณอาจรู้เรื่องนี้อยู่แล้ว ตอนนี้เพียงแค่คัดลอกไฟล์แพคเกจ ".deb" สำหรับสถาปัตยกรรมที่กำหนดลงในไดเรกทอรีที่เหมาะสม หากคุณชี้เว็บเบราว์เซอร์ที่คุณชื่นชอบที่http://localhost/debs/amd64
(ตัวอย่าง) คุณจะเห็นรายการของแพ็คเกจสำหรับระบบ 64 บิต
สร้างไฟล์ Packages.gz
ตอนนี้เราต้องสร้างไฟล์แคตตาล็อกเพื่อให้ APT ใช้งาน สิ่งนี้ทำด้วยยูทิลิตี้ที่เรียกว่า "dpkg-scanpackages" นี่'
# cd /var/www/debs/
# dpkg-scanpackages amd64 | gzip -9c > amd64/Packages.gz
ทำให้ที่เก็บรู้จัก APT
ตอนนี้สิ่งเดียวที่ต้องทำคือให้ APT รู้เกี่ยวกับที่เก็บของคุณ คุณทำได้โดยอัปเดตไฟล์ /etc/apt/sources.list ของคุณ คุณจะต้องมีรายการเช่นนี้:
deb http://localhost/debs/ amd64/
ฉันใช้ชื่อโฮสต์จริงของระบบแทน localhost - วิธีนี้รหัสเหมือนกันสำหรับคอมพิวเตอร์ทุกเครื่องใน LAN ของฉัน แต่ localhost จะทำได้ดีถ้าคุณใช้คอมพิวเตอร์เพียงเครื่องเดียว
ตอนนี้อัปเดต APT:
# apt-get update
/var/www/debs
/var/www/html/debs
หรือคุณจะต้องทำตามขั้นตอนพิเศษเพื่อแก้ไขการตั้งค่า apache ของคุณด้วยตัวเองใน/etc/apache2
การสร้างที่เก็บรับรองความถูกต้อง
ฉันได้ดูคำตอบที่นี่และในเว็บไซต์อื่น ๆ และส่วนใหญ่มีข้อเสีย (IMHO ใหญ่) ที่คุณตั้งค่าพื้นที่เก็บข้อมูลที่ไม่ผ่านการตรวจสอบสิทธิ์ ซึ่งหมายความว่าคุณต้องทำงานapt-get
ที่มี--allow-unauthenticated
การติดตั้งแพคเกจจากมัน นี่อาจเป็นความเสี่ยงด้านความปลอดภัยโดยเฉพาะอย่างยิ่งในสคริปต์ที่แพ็คเกจที่คุณติดตั้งอาจไม่ได้มาจากที่เก็บในเครื่องของคุณ
โปรดทราบว่าฉันไม่ได้กล่าวถึงวิธีการใช้งานผ่าน LAN แต่นี่เป็นการตั้งค่าทั่วไปที่ค่อนข้างใช้ Apache หรือ nginx (ดูคำตอบอื่น ๆ ที่นี่)
ตั้งค่าไดเรกทอรี repo
mkdir /home/srv/packages/local-xenial
cd /home/srv/packages/local-xenial
จากนั้นเพิ่มบรรทัดsources.list
ดังนี้:
deb file:/home/srv/packages/local-xenial/ ./
การเพิ่มและการลบแพ็คเกจ
ลบแพ็คเกจ
rm /home/srv/packages/local-xenial/some_package_idont_like
เพิ่มแพ็คเกจ
cp /some/dir/apackage.deb /home/srv/packages/local-xenial
ตอนนี้เรียกใช้สคริปต์ต่อไปนี้ซึ่งสร้างไฟล์แพคเกจปล่อยและ InRelease และลงนามด้วยคีย์ส่วนตัวของคุณ gpg:
#!/bin/bash
if [ -z "$1" ]; then
echo -e "usage: `basename $0` DISTRO
where DISTRO is the Ubuntu version codename (e.g. 14.04 is trusty)\n
The way to use this script is to do the changes to the repo first, i.e. delete or copy in the .deb file to /srv/packages/local-DISTRO, and then run this script\n
This script can be run as an unprivileged user - root is not needed so long as your user can write to the local repository directory"
else
cd /srv/packages/local-"$1"
# Generate the Packages file
dpkg-scanpackages . /dev/null > Packages
gzip --keep --force -9 Packages
# Generate the Release file
cat conf/distributions > Release
# The Date: field has the same format as the Debian package changelog entries,
# that is, RFC 2822 with time zone +0000
echo -e "Date: `LANG=C date -Ru`" >> Release
# Release must contain MD5 sums of all repository files (in a simple repo just the Packages and Packages.gz files)
echo -e 'MD5Sum:' >> Release
printf ' '$(md5sum Packages.gz | cut --delimiter=' ' --fields=1)' %16d Packages.gz' $(wc --bytes Packages.gz | cut --delimiter=' ' --fields=1) >> Release
printf '\n '$(md5sum Packages | cut --delimiter=' ' --fields=1)' %16d Packages' $(wc --bytes Packages | cut --delimiter=' ' --fields=1) >> Release
# Release must contain SHA256 sums of all repository files (in a simple repo just the Packages and Packages.gz files)
echo -e '\nSHA256:' >> Release
printf ' '$(sha256sum Packages.gz | cut --delimiter=' ' --fields=1)' %16d Packages.gz' $(wc --bytes Packages.gz | cut --delimiter=' ' --fields=1) >> Release
printf '\n '$(sha256sum Packages | cut --delimiter=' ' --fields=1)' %16d Packages' $(wc --bytes Packages | cut --delimiter=' ' --fields=1) >> Release
# Clearsign the Release file (that is, sign it without encrypting it)
gpg --clearsign --digest-algo SHA512 --local-user $USER -o InRelease Release
# Release.gpg only need for older apt versions
# gpg -abs --digest-algo SHA512 --local-user $USER -o Release.gpg Release
# Get apt to see the changes
sudo apt-get update
fi
ตัวอย่างเนื้อหาของไฟล์ conf / distributions
Origin: My_Local_Repo
Label: My_Local_Repo
Codename: xenial
Architectures: i386 amd64
Components: main
Description: My local APT repository
SignWith: 12345ABC
การเชื่อมโยง
https://wiki.debian.org/RepositoryFormat
http://ubuntuforums.org/showthread.php?t=1090731
https://help.ubuntu.com/community/CreateAuthenticatedRepository
date -Rc
ผมแก้ไขมันdate -Ru
สมมติว่าเป็นสิ่งที่คุณหมายจากคำอธิบายการแก้ไข
คุณยังสามารถตั้งค่าเซิร์ฟเวอร์ต้นทางในเครื่องโดย nginx และ reprepro:
ติดตั้งแพ็คเกจเดเบียน
sudo apt-get install reprepro nginx
ทำไดเรกทอรีสำหรับ reprepro และแก้ไข
sudo mkdir -p /srv/reprepro/ubuntu/{conf,dists,incoming,indices,logs,pool,project,tmp}
$ cd /srv/reprepro/ubuntu/
$ sudo chown -R `whoami` . # changes the repository owner to the current user
/ srv / reprepro / อูบุนตู / conf / กระจาย
Origin: Your Name
Label: Your repository name
Codename: karmic
Architectures: i386 amd64 source
Components: main
Description: Description of repository you are creating
SignWith: YOUR-KEY-ID
/ srv / reprepro / อูบุนตู / conf / ตัวเลือก
ask-passphrase
basedir .
รวมไว้ใน reprepro สร้างมัน
$ reprepro includedeb karmic /path/to/my-package_0.1-1.deb \
# change /path/to/my-package_0.1-1.deb to the path to your package
กำหนดค่า nginx:
/etc/nginx/sites-available/vhost-packages.conf
server {
listen 80;
server_name packages.internal;
access_log /var/log/nginx/packages-access.log;
error_log /var/log/nginx/packages-error.log;
location / {
root /srv/reprepro;
index index.html;
}
location ~ /(.*)/conf {
deny all;
}
location ~ /(.*)/db {
deny all;
}
}
เพิ่มประสิทธิภาพขนาดถัง:
/etc/nginx/conf.d/server_names_hash_bucket_size.conf
server_names_hash_bucket_size 64;
อ้างอิงถึงลิงค์คู่มือการติดตั้ง
คุณอาจต้องการที่จะดูที่และapt-mirror
apt-cacher
นี่คือคำแนะนำเกี่ยวกับวิธีการติดตั้งและใช้งาน
คำแนะนำใน@ BigSack คำตอบและการโพสต์วิกิอย่างเป็นทางการของ Ubuntuไม่ได้ผลสำหรับฉันใน Ubuntu 18.04 จนกว่าฉันจะทำการเปลี่ยนแปลงทั้งสองนี้:
สร้างPackages
ไฟล์ธรรมดาที่ไม่มีการบีบอัด(เมื่อเรียกใช้งานนี้ไดเร็กทอรีการทำงานต้องเป็นที่ตั้งของแพ็กเกจทั้งหมด)
cd /usr/local/mydebs
dpkg-scanpackages -m . > Packages
เพิ่มรายการต่อไปนี้ใน /etc/apt/sources.list
deb [trusted=yes] file:/usr/local/mydebs ./
มีสาเหตุหลายประการที่คุณอาจต้องการสร้างที่เก็บในเครื่อง อย่างแรกคือคุณต้องการประหยัดแบนด์วิดท์หากคุณมีเครื่อง Ubuntu หลายเครื่องที่ต้องอัพเดต ตัวอย่างเช่นถ้าคุณมีเครื่อง Ubuntu 25 เครื่องที่จำเป็นต้องอัพเดตอย่างน้อยสัปดาห์ละครั้งคุณจะประหยัดแบนด์วิดธ์อย่างมากเพราะคุณสามารถทำได้ทั้งหมดยกเว้นที่เก็บข้อมูลในเครื่อง
องค์กรส่วนใหญ่มีแบนด์วิดท์ที่เหมาะสมสำหรับเกตเวย์เครือข่าย แต่แบนด์วิดท์นี้เป็นสินค้าที่มีค่าซึ่งจำเป็นต้องใช้อย่างชาญฉลาด
หลายองค์กรยังมีเราเตอร์ที่มีขีด จำกัด 10MB หรือ 100MB ที่เกตเวย์ แต่การเชื่อมต่อเครือข่าย 1 GB ภายในเพื่อให้แบนด์วิดธ์สามารถใช้ภายในได้ดีขึ้น เหตุผลที่สองสำหรับการสร้างที่เก็บของคุณเองคือคุณสามารถควบคุมได้ว่าจะโหลดแอพพลิเคชั่นใดในเครื่อง Ubuntu ภายในของคุณ
คุณสามารถลบแอปพลิเคชันใด ๆ ที่องค์กรของคุณไม่ต้องการใช้บนเครือข่ายท้องถิ่นจากที่เก็บที่อัพเดตเครื่อง ยิ่งไปกว่านั้นคุณสามารถสร้างกล่องทดสอบและทดสอบแอปพลิเคชันและเวอร์ชันก่อนที่จะอนุญาตให้เปิดใช้งานเครือข่ายของคุณเพื่อความปลอดภัยและความมั่นคง
ก่อนอื่นคุณต้องตั้งค่ามิเรอร์เพื่อที่คุณจะต้องเพียงแค่กด Ctrl+ Alt+ Tบนแป้นพิมพ์เพื่อเปิดเทอร์มินัล เมื่อเปิดขึ้นให้เรียกใช้คำสั่งด้านล่าง
apt-get install apt-mirror
เมื่อคุณตั้งค่า apt-mirror เรียบร้อยแล้วคุณสามารถเริ่มดาวน์โหลดที่เก็บด้วยคำสั่งนี้
apt-mirror /etc/apt/mirror.list 1
1ที่มา:สร้างที่เก็บ Ubuntu
วิธีสร้างที่เก็บโลคัลออฟไลน์
1. ทำให้ dir เข้าถึงได้ (atleast by root)
sudo mkdir / var / my-local-repo
sudo dpkg-scanpackages / var / my-local-repo / dev / null> / var / my-local-repo / แพ็คเกจ
echo "ไฟล์ deb: / var / my-local-repo ./"> /tmp/my-local.list
sudo mv /tmp/my-local.list /etc/apt/sources.list.d/my-local.list
sudo apt-get update
ฉันพยายามที่จะใช้apt-rdepends
เหมือนในคำตอบที่เลือก แต่เมื่อฉันพยายามที่จะติดตั้งแพคเกจจากพื้นที่เก็บข้อมูลในท้องถิ่นของฉันมันบ่นเกี่ยวกับการพึ่งพาที่ขาดหายไป
apt-rdepends
ไม่ได้แสดงรายการสิ่งที่ต้องพึ่งพาสำหรับแพ็คเกจของฉัน ฉันสงสัยว่ามันมีบางอย่างที่เกี่ยวข้องกับความจริงที่apt-cache show
แสดงให้เห็นหลายระเบียนสำหรับมัน
แต่ฉันใช้apt-cache depends
และนั่นก็หลอกลวง:
รับรายการการอ้างอิงซ้ำ
apt-cache depends <packagename> -i --recurse
-i
: การอ้างอิงที่สำคัญเท่านั้น
--recurse
: การเรียกซ้ำ
เปลี่ยนเป็นรายการย่อย
| tr -d "|,<,>, "
| sed -e 's/^Depends://g' | sed -e 's/^PreDepends://g'
| sort
| uniq > list.txt
คำสั่งเสร็จสมบูรณ์:
apt-cache depends <packagename> -i --recurse | tr -d "|,<,>, " | sed -e \
's/^Depends://g' | sed -e 's/^PreDepends://g' | sort | uniq > list.txt
ดาวน์โหลดแพ็คเกจ
for i in $( cat list.txt ); do apt-get download $i; done;
สแกนหาแพ็กเกจแล้วเปลี่ยนเป็น Packages.gz
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
ฉันใช้กระจกเงา apt-mirror เสร็จแล้ว
มันดี แต่คุณต้องมีพื้นที่ฮาร์ดไดรฟ์มากขึ้นเพราะมันจะทำการซิงค์กับเซิร์ฟเวอร์ repos