วิธีที่จะทำให้การพึ่งพาการติดตั้งอัตโนมัติรอบต่อนาที


138

ฉันสร้างแพ็คเกจ RPM สองชุด

  • proj1-1.0-1.x86_64.rpm
  • libtest1-1.0-1.x86_64.rpm

proj1ขึ้นอยู่กับไฟล์ที่libtest1.soมีอยู่และมันถูกสะท้อนอย่างถูกต้องในแพ็คเกจ RPM ตามที่เห็นที่นี่:

user@my-pc:~$ rpm -qp --requires proj1-1.0-1.x86_64.rpm
libtest1.so()(64bit)

user@my-pc:~$ rpm -qp --provides libtest1-1.0-1.x86_64.rpm
libtest1.so()(64bit)

การติดตั้งproj1ล้มเหลวเนื่องจากการอ้างอิงหายไป

user@my-pc:~$ rpm -ivh proj1-1.0-1.x86_64.rpm
error: Failed dependencies:
libtest1.so()(64bit) is needed by proj1-1.0-1.x86_64.rpm

ฉันจะมั่นใจได้อย่างไรว่า libtest1-1.0-1.x86_64.rpmมีการติดตั้งโดยอัตโนมัติในระหว่างการติดตั้งproj1-1.0-1.x86_64.rpm?

ฉันลอง--aidตัวเลือกด้วยrpm -iตามที่อธิบายไว้ที่นี่แต่มันไม่ได้ผลสำหรับฉัน

มีวิธีอื่น ๆ ?

ขอบคุณสำหรับความช่วยเหลือใด ๆ

คำตอบ:


102

สร้างพื้นที่เก็บข้อมูล (ในเครื่อง) และใช้yumเพื่อแก้ไขการอ้างอิงสำหรับคุณ

วิกิ CentOS มีหน้าดีที่ให้วิธีการนี้ วิกิพีเดีย CentOS HOWTOs


สรุปและย่อเล็กสุดเพิ่มเติม (ไม่เหมาะ แต่เร็วที่สุด):

  1. /home/user/repoสร้างไดเรกทอรีสำหรับคุณพื้นที่เก็บข้อมูลในท้องถิ่นเช่น
  2. ย้าย RPMs ไปยังไดเรกทอรีนั้น
  3. แก้ไขสิทธิ์การเป็นเจ้าของและระบบไฟล์บางส่วน:

    # chown -R root.root /home/user/repo
    
  4. ติดตั้งcreaterepoแพ็กเกจหากยังไม่ได้ติดตั้งและรัน

    # createrepo /home/user/repo
    # chmod -R o-w+r /home/user/repo
    
  5. สร้างไฟล์กำหนดค่าที่เก็บเช่น/etc/yum.repos.d/myrepo.repoมี

    [local]
    name=My Awesome Repo
    baseurl=file:///home/user/repo
    enabled=1
    gpgcheck=0
    
  6. ติดตั้งแพ็คเกจของคุณโดยใช้

    # yum install packagename
    

46
ลิงก์ที่คุณให้ไว้แก้ไขกรณีของฉันด้วยบรรทัดนี้เพียงบรรทัดเดียว: yum --nogpgcheck localinstall packagename.arch.rpm.
Matthew

@Matthew Cool ที่จะกำจัดขั้นตอนที่เก็บในเครื่องทั้งหมด โพสต์ว่าเป็นคำตอบที่ฉันพูด
gertvdijk

สิ่งนี้ใช้งานไม่ได้ดีถ้าคุณพยายามสคริปต์ RPM เพื่อทำการติดตั้ง YUM บน AIX โดยอัตโนมัติเช่นฉัน ;-)
Tricky

1
@ Max13 นั่นคือyum localinstallและมันก็เหมือนกับคำตอบที่โพสต์แล้วที่นี่พร้อมกับข้อเสียที่กล่าวถึงแล้วสำหรับสถานการณ์ที่การพึ่งพาไม่ได้อยู่ใน yum repos (ดูวิธีนี้จะไม่ทำงานเว้นแต่ [... ] )
gertvdijk

คิดสิ่งนี้เช่นกันหากไม่มีการเชื่อมต่ออินเทอร์เน็ตอยู่ที่นั่นsudo yum --disablerepo=* --enablerepo=local install packagename.arch.rpmเพื่อให้แน่ใจyumว่าไม่ได้ดูที่เก็บข้อมูลอื่น
Anshuman Goel

194

ลิงก์ @gertvdijk ที่ระบุแสดงวิธีที่รวดเร็วเพื่อให้ได้ผลลัพธ์ที่ต้องการโดยไม่ต้องกำหนดค่าที่เก็บในเครื่อง:

$ yum --nogpgcheck localinstall packagename.arch.rpm

เพียงเปลี่ยนpackagename.arch.rpmเป็นชื่อไฟล์ RPM ที่คุณต้องการติดตั้ง

แก้ไขเพียงการชี้แจงสิ่งนี้จะติดตั้งการอ้างอิงทั้งหมดที่มีอยู่แล้วผ่านที่เก็บข้อมูล YUM ของระบบโดยอัตโนมัติ

หากคุณมีความพึงพอใจต่อการพึ่งพา RPM อื่น ๆ ที่ไม่ได้อยู่ในที่เก็บของระบบวิธีการนี้จะไม่ทำงานจนกว่าจะมีการระบุ RPM แต่ละรายการพร้อมกับpackagename.arch.rpmในบรรทัดคำสั่ง


7
ไม่สิ่งนี้จะใช้งานไม่ได้เว้นแต่libtest1-1.0-1.x86_64.rpmจะอยู่ในที่เก็บอื่น ๆ หรือทั้งสองแพคเกจจะถูกระบุในบรรทัดคำสั่งอย่าง " rpm -i" ฉันเพิ่งตรวจสอบเรื่องนี้ในyum3.4.3 (Fedora 18) บันทึกที่นี่แสดงว่ามันไปที่updatesrepo สำหรับการอ้างอิงแม้ว่าไฟล์จะอยู่ที่นั่นก็ตาม
Aaron D. Marasco

3
@ AaronD.Marasco บางทีคุณอาจจะถูกต้องเกี่ยวกับกรณีเฉพาะที่อธิบายไว้ในคำถาม แต่หนึ่งซับนั้นง่ายกว่ามากสำหรับทุกคนที่มาที่นี่อย่างที่ฉันทำและเป็นคำตอบที่ถูกต้องสำหรับคำถามในหัวข้อ "วิธีการ ทำให้การพึ่งพาการติดตั้งอัตโนมัติรอบต่อนาที ".
Matthew

3
ไม่มันไม่ใช่ "การติดตั้งอัตโนมัติ" การพึ่งพา - คุณกำลังระบุไว้ในบรรทัดคำสั่งเช่นเดียวกับที่คุณทำกับ " rpm -i" ดังนั้นการใช้yumจะไม่ได้รับประโยชน์ใด ๆ เพิ่มเติม
Aaron D. Marasco

2
โปรดอ่านสิ่งที่ฉันเขียนอีกครั้ง การอ้างอิงใด ๆ ถูกดาวน์โหลดจากที่เก็บแม้ว่าจะพร้อมใช้งานแบบโลคัลในไดเร็กทอรีด้วย RPM ที่คุณติดตั้ง
Aaron D. Marasco

1
@ AaronD.Marasco ฉันไม่ได้โต้วาทีว่าวิธีการโพสต์อื่น ๆ จะดีกว่าสำหรับตัวอย่างที่เฉพาะเจาะจง OP ได้ถามเกี่ยวกับ คำตอบของฉัน แต่เป็นที่ถูกต้องสำหรับการตอบคำถามในชื่อและเป็นมากเร็วกว่ากำหนดค่า repo ท้องถิ่นและจะช่วยให้คนอื่น ๆ ที่ลมขึ้นที่นี่เหมือนผมที่ต้องการวิธีที่รวดเร็วที่จะได้รับ yum โดยอัตโนมัติติดตั้งการอ้างอิงที่นั้น รอบต่อนาทีต้องการ นั่นคือจุดประสงค์ของการล้นสแต็คเพื่อช่วยให้ชุมชนค้นหาคำตอบและไม่เพียง แต่ช่วย OP
แมทธิว

28

สำหรับ DNF ผู้ใช้เพียงแค่การใช้งานdnf install *.rpm, localinstallไม่มีความจำเป็น


1
มาที่นี่เพื่อพูดสิ่งนี้อย่างแน่นอน
nawfel bgh

1
ขอบคุณผมดิ้นรนในการติดตั้งด้วยmysql-workbench rpm -ivhในที่สุดก็จบลงด้วยการโพสต์นี้ DNF ทำกลอุบาย
BlueBird

21

สำหรับฉันทำงานด้วย

# yum install ffmpeg-2.6.4-1.fc22.x86_64.rpm

และขออนุญาตโดยอัตโนมัติเพื่อ dowload การพึ่งพา ด้านล่างตัวอย่างฉันใช้ fedora 22

[root@localhost lukas]# yum install ffmpeg-2.6.4-1.fc22.x86_64.rpm
Yum command has been deprecated, redirecting to '/usr/bin/dnf install  ffmpeg-2.6.4-1.fc22.x86_64.rpm'.
See 'man dnf' and 'man yum2dnf' for more information.
To transfer transaction metadata from yum to DNF, run:
'dnf install python-dnf-plugins-extras-migrate && dnf-2 migrate'

Last metadata expiration check performed 0:28:24 ago on Fri Sep 25 12:43:44 2015.
Dependencies resolved.
====================================================================================================================
 Package               Arch           Version                                  Repository                      Size
====================================================================================================================
Installing:
 SDL                   x86_64         1.2.15-17.fc22                           fedora                         214 k
 ffmpeg                x86_64         2.6.4-1.fc22                             @commandline                   1.5 M
 ffmpeg-libs           x86_64         2.6.4-1.fc22                             rpmfusion-free-updates         5.0 M
 fribidi               x86_64         0.19.6-3.fc22                            fedora                          69 k
 lame-libs             x86_64         3.99.5-5.fc22                            rpmfusion-free                 345 k
 libass                x86_64         0.12.1-1.fc22                            updates                         85 k
 libavdevice           x86_64         2.6.4-1.fc22                             rpmfusion-free-updates          75 k
 libdc1394             x86_64         2.2.2-3.fc22                             fedora                         124 k
 libva                 x86_64         1.5.1-1.fc22                             fedora                          79 k
 openal-soft           x86_64         1.16.0-5.fc22                            fedora                         292 k
 opencv-core           x86_64         2.4.11-5.fc22                            updates                        1.9 M
 openjpeg-libs         x86_64         1.5.1-14.fc22                            fedora                          89 k
 schroedinger          x86_64         1.0.11-7.fc22                            fedora                         315 k
 soxr                  x86_64         0.1.2-1.fc22                             updates                         83 k
 x264-libs             x86_64         0.142-12.20141221git6a301b6.fc22         rpmfusion-free                 587 k
 x265-libs             x86_64         1.6-1.fc22                               rpmfusion-free                 486 k
 xvidcore              x86_64         1.3.2-6.fc22                             rpmfusion-free                 264 k

Transaction Summary
====================================================================================================================
Install  17 Packages

Total size: 11 M
Total download size: 9.9 M
Installed size: 35 M
Is this ok [y/N]: y

วิธีที่ง่ายที่สุดที่ฉันคิด
Shams

ไม่ใช่วิธี rpm โดยตรง แต่ฉันชอบสิ่งนี้ที่สุด
TFuto

ไม่ใช่โซลูชัน RPM แต่เป็นวิธีที่ง่ายที่สุดในการติดตั้งการพึ่งพาโดยใช้เพียงคำสั่งเดียว สิ่งนี้ใช้ได้อย่างไร้ที่ติสำหรับฉัน
Enrique Benitez

9

ฉันพบวิธีแก้ไขที่ง่ายกว่า หากคุณมี RPM ทั้งหมดในไดเรกทอรีเดียวกันสิ่งที่คุณต้องทำคือ

$ sudo rpm -i *.rpm

rpm ดูเหมือนว่าจะทราบลำดับที่ถูกต้องในการติดตั้งเหล่านี้และติดตั้ง RPM


5
ที่ยังไม่จัดการกรณีถ้าการอ้างอิงไม่ได้อยู่ในไดเรกทอรีปัจจุบัน
Ding-Yi Chen

4

คำตอบของแมทธิวทำให้เกิดอารมณ์มากมายเนื่องจากข้อเท็จจริงที่ว่ามันยังขาดรายละเอียดเล็กน้อย คำสั่งทั่วไปจะเป็น:

# yum --nogpgcheck localinstall <package1_file_name> ... <packageN_file_name>

package_file_nameข้างต้นสามารถรวมถึงเส้นทางแน่นอนหรือญาติท้องถิ่นหรือเป็น URL ที่ (อาจจะแม้แต่ URI)

ยำจะค้นหาการอ้างอิงในไฟล์แพคเกจทั้งหมดที่ได้รับในบรรทัดคำสั่งและหากมันล้มเหลวในการค้นหาการพึ่งพาที่นั่นก็จะใช้ที่เก็บยำที่กำหนดค่าและเปิดใช้งานใด ๆ

ทั้งไดเร็กทอรีการทำงานปัจจุบันและพา ธ ของการใด ๆpackage_file_nameจะถูกค้นหายกเว้นเมื่อไดเร็กทอรีใด ๆ เหล่านี้ถูกกำหนดคอนฟิกไว้ก่อนหน้านี้เป็นที่yumเก็บที่เปิดใช้งาน

ดังนั้นในกรณีของyumคำสั่งOP :

# cd <path with pkg files>; yum --nogpgcheck localinstall ./proj1-1.0-1.x86_64.rpm ./libtest1-1.0-1.x86_64.rpm

จะทำเช่นเดียวกับที่จะทำrpm:

# cd <path with pkg files>; rpm -i proj1-1.0-1.x86_64.rpm libtest1-1.0-1.x86_64.rpm

ความแตกต่างระหว่างสิ่งเหล่านี้yumและrpmการเรียกใช้จะสามารถมองเห็นได้หากหนึ่งในแพ็กเกจที่แสดงรายการที่จะติดตั้งมีการขึ้นต่อกันของแพ็กเกจที่ไม่ได้แสดงรายการอยู่ในบรรทัดคำสั่ง

ในกรณีดังกล่าวrpmจะปฏิเสธที่จะดำเนินการต่อในขณะที่yumจะใช้ที่เก็บข้อมูลที่กำหนดค่าและเปิดใช้งาน yum เพื่อค้นหาการอ้างอิงและอาจประสบความสำเร็จ

ไดเรกทอรีการทำงานปัจจุบันจะไม่ถูกค้นหาในกรณีใด ๆ ยกเว้นเมื่อก่อนหน้านี้ได้รับการกำหนดค่าเป็นที่yumเก็บที่เปิดใช้งาน


0

ฉันวิ่งเข้าไปในนี้และสิ่งที่ทำงานสำหรับฉันคือการทำงาน yum localinstall enterPkgNameHere.rpmจากภายในไดเรกทอรีที่มีไฟล์. rpm อยู่

หมายเหตุ: แทนที่enterPkgNameHere.rpmด้วยชื่อของไฟล์. rpm ของคุณ


0

ในกรณีของ openSUSE Leap 15 ฉันได้รับข้อผิดพลาดที่คล้ายกัน:

> sudo rpm -i opera-stable_53.0.2907.68_amd64.rpm 
[sudo] password for root: 
warning: opera-stable_53.0.2907.68_amd64.rpm: Header V4 RSA/SHA512 Signature, key ID a5c7ff72: NOKEY
error: Failed dependencies:
    at is needed by opera-stable-53.0.2907.68-0.x86_64

ฉันเรียกใช้คำสั่งนี้เพื่อหาสิ่งที่อ้างอิง:

> sudo zypper install opera-stable_53.0.2907.68_amd64.rpm 
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 4 NEW packages are going to be installed:
  at libfl2 libHX28 opera-stable

4 new packages to install.
Overall download size: 50.3 MiB. Already cached: 0 B. After the operation, additional 176.9 MiB will be used.
Continue? [y/n/...? shows all options] (y): n

จากนั้นฉันรันคำสั่งนี้เพื่อติดตั้งการพึ่งพา:

> sudo zypper in at
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 3 NEW packages are going to be installed:
  at libfl2 libHX28

3 new packages to install.
Overall download size: 208.6 KiB. Already cached: 0 B. After the operation, additional 600.4 KiB will be used.
Continue? [y/n/...? shows all options] (y): y

จากนั้นฉันเรียกใช้สิ่งนี้เพื่อติดตั้งrpmไฟล์:

> sudo rpm -i opera-stable_53.0.2907.68_amd64.rpm

ฉันไม่แน่ใจว่านี่เป็นวิธีปฏิบัติที่ดีที่สุดหรือไม่ แต่มันสามารถแก้ไขปัญหาของฉันได้


0

ขั้นที่ 1: คัดลอก rpm pkg ทั้งหมดในสถานที่ที่กำหนด

ขั้นตอนที่ 2: หากยังไม่ได้ติดตั้ง createrepo เนื่องจากจะไม่ติดตั้งตามค่าเริ่มต้น

[root@pavangildamysql1 8.0.11_rhel7]# yum install createrepo

ขั้นตอนที่ 3: สร้างข้อมูลเมตาของที่เก็บและให้สิทธิ์ด้านล่าง

[root@pavangildamysql1 8.0.11_rhel7]# chown -R root.root /scratch/PVN/8.0.11_rhel7
[root@pavangildamysql1 8.0.11_rhel7]# createrepo /scratch/PVN/8.0.11_rhel7
Spawning worker 0 with 3 pkgs
Spawning worker 1 with 3 pkgs
Spawning worker 2 with 3 pkgs
Spawning worker 3 with 2 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[root@pavangildamysql1 8.0.11_rhel7]# chmod -R o-w+r /scratch/PVN/8.0.11_rhel7

ขั้นตอนที่ 4: สร้างไฟล์พื้นที่เก็บข้อมูลที่มีเนื้อหาดังต่อไปนี้ที่ /etc/yum.repos.d/mysql.repo

[local]
name=My Awesome Repo
baseurl=file:///scratch/PVN/8.0.11_rhel7
enabled=1
gpgcheck=0

Step5 เรียกใช้คำสั่งนี้เพื่อติดตั้ง

[root@pavangildamysql1 local]# yum --nogpgcheck localinstall mysql-commercial-server-8.0.11-1.1.el7.x86_64.rpm

-2

Simple เพียงรันคำสั่งต่อไปนี้

sudo dnf install *package.rpm

ป้อนรหัสผ่านของคุณและคุณทำเสร็จแล้ว


-5

กระบวนการสร้าง RPM จากไฟล์ต้นฉบับ: 1) ดาวน์โหลดซอร์สไฟล์ที่มีนามสกุล ..gz 2) ติดตั้ง rpm-build และ rpmdevtools จาก yum install (โฟลเดอร์ rpmbuild จะถูกสร้างขึ้น ... SPECS SOURCES, RPMS .. โฟลเดอร์จะถูกสร้างขึ้นภายในโฟลเดอร์ rpmbuild) 3) คัดลอก source code.gz ไปยังโฟลเดอร์ SOURCES (rpmbuild / SOURCES) 4) ยกเลิกการ tar ลูก tar โดยใช้คำสั่งต่อไปนี้ ไปที่โฟลเดอร์ SOURCES: rpmbuild / SOURCES ที่มีไฟล์ tar อยู่ คำสั่ง: เช่นโฟลเดอร์ tar -xvzf httpd-2.22.tar.gz httpd-2.22 จะถูกสร้างในเส้นทางเดียวกัน ตรวจสอบว่า apr และ apr-util และมีอยู่ในโฟลเดอร์ httpd-2.22 / srclib ถ้า apr และ apr-util ไม่มีอยู่ให้ดาวน์โหลดเวอร์ชันล่าสุดจากไซต์ Apache ให้ถอดและวางไว้ในโฟลเดอร์ httpd-2.22 / srclib ยังให้แน่ใจว่าคุณมี pcre ติดตั้งในระบบของคุณ

5) ไปที่โฟลเดอร์ที่แตกไฟล์แล้วพิมพ์คำสั่งด้านล่าง: ./configure --prefix = / usr / local / apache2 - พร้อมกับ apr --enable-proxy --enable-proxy-balancer - with mpm = ผู้ปฏิบัติงาน --enable-mods-static = ทั้ง 6) เรียกใช้คำสั่งด้านล่างเมื่อกำหนดค่าสำเร็จแล้ว: ทำ 7) หลังจากการดำเนินการสำเร็จแล้วให้ทำการเรียกใช้คำสั่ง: ตรวจสอบการติดตั้งในโฟลเดอร์เดียวกัน (หากคุณไม่มีซอฟต์แวร์ตรวจสอบการติดตั้งโปรดดาวน์โหลดรุ่นล่าสุดจากไซต์) นอกจากนี้ซอฟต์แวร์ตรวจสอบการติดตั้งมีข้อผิดพลาดที่สามารถแก้ไขได้ด้วยวิธีการดังต่อไปนี้ ::::: ค้นหา checkinstallrc แล้วเปลี่ยน TRANSLATE = 1 ถึง TRANSLATE = 0 โดยใช้คำสั่ง vim ตรวจสอบแพ็กเกจที่แยกออกด้วย: EXCLUDE = "/ selinux" 8) checkinstall จะถามตัวเลือก (พิมพ์ R หากคุณต้องการ tp build rpm สำหรับไฟล์ต้นฉบับ) 9) ไฟล์. rpm ที่สร้างเสร็จแล้วจะถูกสร้างขึ้นในโฟลเดอร์ RPMS ภายในไฟล์ rpmbuild / RPMS .. ดีที่สุด ....

ขอแสดงความนับถือ Prerana


ไม่มีใครถามเกี่ยวกับการสร้างอะไร นี่คือการแก้ไขการขึ้นต่อกันของ RPM ที่สร้างขึ้นแล้ว
Craig Jackson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.