मैं 64-बिट डेबियन / उबंटू पर 32-बिट प्रोग्राम कैसे चलाऊं?


74

मेरे पास 64-बिट (amd64 उर्फ ​​x86_64) डेबियन या उबंटू इंस्टॉलेशन है। मुझे कभी-कभी 32-बिट (i386 / i686) प्रोग्राम चलाने या 32-बिट सिस्टम के लिए प्रोग्राम संकलित करने की आवश्यकता होती है। मैं कम से कम उपद्रव के साथ यह कैसे कर सकता हूं?

बोनस: क्या होगा अगर मैं वितरण के पुराने या नए रिलीज के साथ चलाना या परीक्षण करना चाहता हूं?


Ubuntu के पूछने पर समान संभव: askubuntu.com/questions/359156/…
Ciro Santilli 中心

जवाबों:


52

मूल समर्थन

चूंकि उबंटू 11.04 और डेबियन मट्ज़ी (7.0), डेबियन और उबंटू में मल्टीकार सपोर्ट है: आप x86_32 (i386) और x86_64 (amd64) पैकेज को एक ही सिस्टम पर सीधे तरीके से मिला सकते हैं। इसे मल्टीकार सपोर्ट के रूप में जाना जाता है । अधिक विवरण के लिए देखें warl0ck का जवाब

पुराने रिलीज में, डिबियन और उबंटू जहाज amd64 पर 32-बिट पुस्तकालयों की संख्या के साथ। 32-बिट पुस्तकालयों के मूल सेट के लिए पैकेज स्थापित करें , और संभवतः अन्य पैकेज जो इस पर निर्भर करते हैं। यदि आपके पास सभी आवश्यक पुस्तकालय हैं तो आपका 32-बिट निष्पादन योग्य बस चलना चाहिए। विकास के लिए, स्थापित करें , और संभवत: अन्य पैकेज जो इस पर निर्भर करते हैं जैसे कि । आप उपयोगी भी मिल सकते हैं , और डेबियन पर। Ix86 के संकलन के लिए gcc का विकल्प पास करें ।ia32-libs Ia32-libs स्थापित करेंgcc-multilib जीसीसी-मल्टीबिल स्थापित करेंg++-multilibbinutils-multiarch Binutils-multarch इंस्टॉल करेंia32-libs-dev-m32

ध्यान दें कि अगर आपने 32-बिट उपयोगकर्ता मोड घटक स्थापित किए हैं, तब uname -mभी x64_64यदि आप 64-बिट कर्नेल चला रहे हैं, तब भी दिखाई देगा । नीचे वर्णित श्रोत इस बात का ध्यान रखता है।

Schroot

यह अनुभाग एक अन्य लिनक्स वितरण "अंदर" एक डेबियन जैसी वितरण को स्थापित करने के लिए एक मार्गदर्शिका है। इसे 64-बिट उबंटू के अंदर 32-बिट उबंटू स्थापित करने के संदर्भ में कहा जाता है, लेकिन इसे अन्य स्थितियों के लिए छोटे संशोधनों के साथ लागू करना चाहिए, जैसे कि डेबियन स्थिर अंदर डेबियन स्थिर स्थापित करना या इसके विपरीत।

परिचय

विचार यह है कि एक उपशीर्षक में एक वैकल्पिक वितरण स्थापित करें और उसी से चलाएं। आप 64-बिट सिस्टम पर 32-बिट सिस्टम स्थापित कर सकते हैं, जिस तरह से, या आपके वितरण का एक अलग रिलीज, या स्थापित पैकेजों के विभिन्न सेटों के साथ एक परीक्षण वातावरण।

chrootकमान और सिस्टम कॉल फाइल सिस्टम है कि निर्देशिका वृक्ष की एक सबट्री के लिए प्रतिबंधित है के एक दृश्य के साथ एक प्रक्रिया शुरू होता है। डेबियन और उबंटू जहाज श्रोत , एक उपयोगिता जो इस विशेषता के चारों ओर लपेटता है ताकि अधिक उपयोगी उप-वातावरण बनाया जा सके।

स्थापित schrootपैकेज श्रोत स्थापित करें ( डेबियन ) और debootstrapपैकेज Debootstrap स्थापित करें ( डेबियन )। डेबूटस्ट्रैप को केवल वैकल्पिक वितरण की स्थापना के लिए आवश्यक है और बाद में हटाया जा सकता है।

विद्वत्ता की स्थापना करें

यह उदाहरण बताता है कि 32-बिट Ubuntu 10.04LTS (ल्यूसिड लिनेक्स) को वैकल्पिक वातावरण कैसे सेट किया जाए। एक समान सेटअप को डेबियन और उबंटू के अन्य रिलीज के साथ काम करना चाहिए। /etc/schroot/chroot.d/lucid32निम्नलिखित सामग्री के साथ एक फ़ाइल बनाएँ :

[lucid32]
description=Ubuntu 10.04LTS 32-bit
directory=/32
type=directory
personality=linux32
users=yourusername
groups=users,admin

लाइन directory=/32schroot को बताती है कि हम 32-बिट इंस्टॉलेशन की फ़ाइलों को कहाँ रखेंगे। रेखा का username=yourusernameकहना है कि उपयोगकर्ता yourusernameको स्क्रोट का उपयोग करने की अनुमति दी जाएगी। रेखा का groups=users,adminकहना है कि किसी भी समूह में उपयोगकर्ताओं को schroot का उपयोग करने की अनुमति दी जाएगी; आप एक users=…निर्देश भी रख सकते हैं ।

नया वितरण स्थापित करें

निर्देशिका बनाएं और इसे डीबूटस्ट्रैप के साथ आबाद करना शुरू करें। डीबूटस्ट्रैप निर्दिष्ट वितरण और वास्तुकला के लिए संकुल का एक मुख्य सेट डाउनलोड और इंस्टॉल करता है।

mkdir /32
debootstrap --arch i386 lucid /32 http://archive.ubuntu.com/ubuntu

आपके पास पहले से ही एक कार्य प्रणाली है; क्या है मामूली वृद्धि। /32/etcजब आप इसे चलाते हैं, तो विशेष रूप से DNS कॉन्फ़िगरेशन /etc/resolv.confऔर विशेष रूप से /etc/passwdऔर अन्य फ़ाइलों में उपयोगकर्ता डेटाबेस (यह ओवरराइड किया जा सकता है, दस्तावेज़ीकरण देखें) को Schroot स्वचालित रूप से कई फ़ाइलों को अधिलेखित कर देता है। कुछ और फाइलें हैं जिन्हें आप एक बार और सभी के लिए मैन्युअल रूप से कॉपी करना चाहते हैं:

cp -p /etc/apt/apt.conf /32/etc/apt/      # for proxy settings
cp -p /etc/apt/sources.list /32/etc/apt/  # for universe, security, etc
cp -p /etc/environment /32/etc/           # for proxy and locale settings
cp -p /etc/sudoers /32/etc/               # for custom sudo settings

फाइल /etc/mtabया /etc/fstabचिरोट में नहीं होगी । मैं mountचेरोट में मैन्युअल रूप से कमांड का उपयोग करने की अनुशंसा नहीं करता, इसे बाहर से करें। लेकिन उचित /etc/mtabरूप से dfकाम करने के लिए पर्याप्त रूप से पर्याप्त बनाएं ।

ln -s /proc/mounts /32/etc/mtab

साथ directoryप्रकार, schroot प्रदर्शन करेंगे बाँध माउंट : निर्देशिका के एक नंबर का, यानी उन निर्देशिकाओं माता पिता स्थापना के साथ साझा किया जाएगा /proc, /dev, /home, /tmp

चेरोट में सेवाएं

जैसा कि यहाँ बताया गया है, एक विद्वान डेमॉन चलाने के लिए उपयुक्त नहीं है। जब आप schroot से बाहर निकलते हैं, तो schroot में प्रोग्राम मारे जाएंगे। यदि आप इसे और अधिक स्थायी बनाना चाहते हैं, तो मूल निर्देशिका के बजाय "सादे" श्रोत का उपयोग करें, और /etc/fstabमूल स्थापना पर स्थायी बाँध आरोह सेट करें ।

डेबियन और उबंटू में, इंस्टॉलेशन पर सेवाएं अपने आप शुरू हो जाती हैं। इससे बचने के लिए (जो कि चेरोट के बाहर चल रही सेवाओं को बाधित कर सकता है, विशेष रूप से क्योंकि नेटवर्क पोर्ट साझा किए जाते हैं), चेरोट में सेवाओं को नहीं चलाने की नीति स्थापित करें। निम्न स्क्रिप्ट को इस रूप में रखें /32/usr/sbin/policy-rc.dऔर इसे निष्पादन योग्य ( chmod a+rx /32/usr/sbin/policy-rc.d) बनाएं ।

#!/bin/sh
## Don't start any service if running in a chroot.
## See /usr/share/doc/sysv-rc/README.policy-rc.d.gz
if [ "$(stat -c %d:%i /)" != "$(stat -c %d:%i /proc/1/root/.)" ]; then
  exit 101
fi

नई प्रणाली आबाद करें

अब हम चुरोट का उपयोग शुरू कर सकते हैं। आप इस बिंदु पर कुछ और पैकेज स्थापित करना चाहते हैं।

schroot -c lucid32
sudo apt-get update
apt-get install lsb-core nano
...

आपको कुछ स्थानों को बनाने की आवश्यकता हो सकती है, जैसे

locale-gen en_US en_US.utf8

यदि schroot उबंटू के पुराने रिलीज जैसे 8.04 (हार्डी) के लिए है, तो ध्यान दें कि पैकेज ubuntu-standard एक MTA में खींचता है। nullmailerडिफ़ॉल्ट के बजाय का चयन करें postfix(आप मेल भेजने के लिए अपने chroot चाहते हो सकता है, लेकिन आप निश्चित रूप से यह किसी भी प्राप्त करने के लिए नहीं चाहते हैं)।

आगे बढ़ते हुए

अधिक जानकारी के लिए, schrootमैनुअल , schroot FAQ और schroot.confमैनुअल देखें । श्रोत, डेबियन ऑटोबुलेर (बिल्डड) परियोजना का हिस्सा है । डीबूटस्ट्रैप के बारे में Ubuntu समुदाय पृष्ठ पर अतिरिक्त उपयोगी सुझाव हो सकते हैं ।

आभासी मशीन

यदि आपको वैकल्पिक वातावरण के पूर्ण अलगाव की आवश्यकता है, तो वर्चुअल मशीन जैसे KVM ( qemu-kvm Qemu-kvm स्थापित करें ) या VirtualBox का उपयोग करें


@ गिल्स क्या आप एक विवरण जोड़ सकते हैं कि [ "$(stat -c %d:%i /)" != "$(stat -c %d:%i /proc/1/root/.)" ]हालत क्या है?
फहीम मीठा

1
@FaheemMitha यह परीक्षण करता है कि स्क्रिप्ट चिरोट में चल रही है या नहीं । यह एक स्वसंपूर्ण प्रणाली के रूप में चेरोट स्थापना को बूट करने के लिए समर्थन करने के लिए है।
गिल्स

मैं users=faheemआपके उदाहरण की तरह एक पंक्ति जोड़ने का सुझाव देता हूं । डिफ़ॉल्ट रूप से, मेरे लिए कम से कम, मैं उपयोगकर्ता समूह का सदस्य नहीं हूं। मुझे उम्मीद होगी, लेकिन।
फहीम मीठा

25

चूंकि उबंटू 11.04 (नैट्टी) और डेबियन 7.0 ( मट्ठा ) ने मल्टीकार सपोर्ट पेश किया है , 32-बिट और 64-बिट लाइब्रेरी एक सिस्टम पर सह-अस्तित्व में आ सकते हैं। 32-बिट लाइब्रेरी libXX स्थापित करने के लिए, पहले अपने सिस्टम में आवश्यक 32 बिट आर्किटेक्चर जोड़ें:

उबंटू के लिए:

sudo dpkg --foreign-architecture i386

और डेबियन के लिए:

sudo dpkg --add-architecture i386

फिर 32 बिट लाइब्रेरी स्थापित करें:

sudo apt-get install libXX:i386

Ia32-libs पैकेज। उबंटू 12.04 सटीक होने के कारण, इसमें अब कोई लाइब्रेरी नहीं है, यह केवल libXX:i386निर्भरता के रूप में पैकेज में खींचती है ।

संकलन भाग C और C ++ प्रोग्राम के लिए नहीं बल्कि आसान है, जोड़ने -m32के लिए CFLAGया CXXFLAGहै, जो होगा उत्पन्न कार्यक्रम 32 बिट कर, जैसे

export CFLAGS="-m32"
gcc main.c -o main

यह मेकफाइल आधारित परियोजनाओं के लिए भी काम करता है।


2
apt-get install ia32-libsमेरे लिए काम किया (13.04)!
ऐटिने

1
ubuntu 14.04 के लिए, यह "sudo dpkg --add- आर्किटेक्चर i386" है
diyism

उदाहरण के लिए, डेबियन जेसी पर: dpkg --add- आर्किटेक्चर i386; apt-get update; apt-get install libstdc ++ 5: i386 libpam0g: i386
जोनाथन बेन-

0

यदि आपके पास बस एक 32-बिट बाइनरी है जिसे आप आधुनिक 64-बिट डेबियन / उबंटू सिस्टम पर चलाना चाहते हैं, तो निम्न कार्य करें:

dpkg --add-architecture i386
apt update
apt install libc6-i386

यह डेबियन 9 पर परीक्षण किया गया है।


1
मुझे sudo apt-get install lib32z1अपने विशेष 32-बिट निष्पादन योग्य की भी आवश्यकता है , यदि वह मदद करता है। त्रुटि थी: sqlite3: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory। हां, यह 2019 है और मैं sqlite प्रोजेक्ट द्वारा समर्थित 64-बिट sqlite3 क्लाइंट को प्री-कनेक्टेड नहीं पा सकता :( मैं इस साझा संसाधन पर इंस्टॉल करने की अनुमति देने के लिए सीमित हूं, क्योंकि मुझे प्रीक्लेम्ड साइक्लाइट पैकेजों को खींचना होगा। शुक्र है कि मैं स्थापित कर सकता हूँ lib32z1
harperville
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.