Introduzzjoni mit-traduttur: Fl-isfond tad-dħul massiv ta' diversi tipi ta' kontenituri f'ħajjitna, jista' jkun pjuttost interessanti u utli li ssir taf b'liema teknoloġiji dan kollu beda darba. Xi wħud minnhom jistgħu jintużaw b'mod utli sal-lum, iżda mhux kulħadd jiftakar metodi bħal dawn (jew jaf, jekk ma nqabdux matul l-iżvilupp mgħaġġel tagħhom). Waħda minn dawn it-teknoloġiji hija User Mode Linux. L-awtur ta 'l-oriġinal għamel ammont ġust ta' tħaffir, sib liema mill-iżviluppi qodma għadu jaħdem u liema le, u għaqqad xi ħaġa bħal struzzjonijiet pass pass dwar kif toħloq UML imkabbar fid-dar għalik innifsek. 2k19. U iva, stiedna lill-awtur tal-post oriġinali lil Habr Cadey, Mela jekk għandek mistoqsijiet, staqsi bl-Ingliż fil-kummenti.
Il-Modalità Utent fil-Linux hija, fil-fatt, port tal-kernel tal-Linux għalih innifsu. Din il-modalità tippermettilek li tħaddem kernel Linux sħiħ bħala proċess tal-utent u huwa komunement użat mill-iżviluppaturi biex jittestjaw is-sewwieqa. Iżda dan il-mod huwa utli wkoll bħala għodda għall-iżolament ġenerali, li l-prinċipju tiegħu huwa simili għat-tħaddim ta 'magni virtwali. Din il-modalità tipprovdi aktar iżolament minn Docker, iżda inqas minn magna virtwali sħiħa bħal KVM jew Virtual Box.
B'mod ġenerali, il-Modalità Utent tista 'tidher għodda stramba u diffiċli biex tużaha, iżda għandha l-użi tagħha. Wara kollox, dan huwa kernel Linux sħiħ li jaħdem bħala utent mhux privileġġjat. Din il-karatteristika tippermetti li kodiċi potenzjalment mhux fdat jaħdem mingħajr ebda theddida għall-magna ospitanti. U peress li dan huwa qalba sħiħa, il-proċessi tiegħu huma iżolati mill-magna ospitanti, jiġifieri proċessi li jaħdmu fil-Modalità Utent mhux se jkunu viżibbli għall-host. Dan mhux bħal kontenitur Docker tradizzjonali, li fih il-magna ospitanti dejjem tara l-proċessi ġewwa l-ħażna. Ħares lejn din il-biċċa pstree minn wieħed mis-servers tiegħi:
U qabbel dan mal-pstree tal-kernel tal-Linux fil-Modalità Utent:
linux─┬─5*[linux]
└─slirp
Meta naħdem ma 'kontenituri Docker, nista' nara mill-ospitant l-ismijiet tal-proċessi li qed jaħdmu fil-mistieden. Dan mhux possibbli bil-Linux User Mode. Xi tfisser? Dan ifisser li l-għodod ta 'monitoraġġ li jaħdmu permezz tas-subsistema tal-verifika tal-Linux ma tarax proċessi li jaħdmu fis-sistema mistieden. Iżda f'xi sitwazzjonijiet din il-karatteristika tista 'tkun xabla b'żewġ truf.
B'mod ġenerali, il-post kollu hawn taħt huwa ġabra ta 'riċerka u tentattivi mhux maħduma biex jinkiseb ir-riżultat mixtieq. Biex nagħmel dan, kelli nuża diversi għodod tal-qedem, naqra sorsi tal-qalba, nidħol f'debugging intensiv ta 'kodiċi miktub meta kont għadni fl-iskola elementari, u wkoll nibda ma' Heroku builds billi tuża binarju speċjali fit-tfittxija tal-għodod li kelli bżonn. Dan ix-xogħol kollu wassal biex il-guys fuq l-IRC tiegħi sejħuli magician. Nittama li din il-kariga sservi bħala dokumentazzjoni affidabbli għal xi ħadd biex jagħmel l-istess ħaġa, iżda b'kernels u verżjonijiet OS aktar ġodda.
aġġustament
It-twaqqif tal-Linux User Mode jinvolvi diversi passi:
l-installazzjoni tad-dipendenzi fuq il-host;
tniżżil tal-kernel tal-Linux;
setup tal-bini tal-kernel;
assemblaġġ tal-qalba;
installazzjoni tal-binarju;
it-twaqqif tas-sistema tal-fajl mistieden;
għażla tal-parametri tal-varar tal-qalba;
it-twaqqif ta' netwerk mistiedna;
tniedi l-kernel mistieden.
Nassumu li jekk tiddeċiedi li tagħmel dan kollu lilek innifsek, x'aktarx li tagħmel dak kollu deskritt f'xi sistema bħal Ubuntu jew Debian. Ippruvajt nimplimenta dak kollu ta 'hawn fuq fid-distribuzzjoni favorita tiegħi - Alpine, iżda xejn ma ħadem, apparentement minħabba li l-kernel tal-Linux huwa marbut sewwa mal-glibc-isms għas-sewwieqa fil-Modalità Utent. Jiena nippjana li nirrapporta dan upstream wara li fl-aħħar insib il-problema.
Installazzjoni tad-dipendenzi fuq il-host
Ubuntu teħtieġ mill-inqas il-pakketti li ġejjin biex tibni l-kernel tal-Linux (jekk wieħed jassumi installazzjoni nadifa):
Jekk jogħġbok innota li t-tħaddim tal-programm ta 'personalizzazzjoni tal-menu għall-qalba tal-Linux se jeħtieġ installazzjoni libncurses-dev. Jekk jogħġbok kun żgur li huwa installat billi tuża l-kmand li ġej (bħala root jew billi tuża sudo):
apt-get -y install libncurses-dev
Niżżel il-qalba
Iddetermina fejn tniżżel u mbagħad ibni l-qalba. Ikollok bżonn talloka madwar 1,3 GB ta 'spazju għall-hard drive għal din l-operazzjoni, għalhekk kun żgur li jkollok.
Issa nidħlu fid-direttorju maħluq meta nħoll it-tarball:
cd linux-5.1.16
Twaqqif ta 'kernel build
Is-sistema tal-bini tal-qalba hija sett Agħmel fajls с ħafna għodod u skripts tad-dwana biex awtomat il-proċess. Biex tibda, iftaħ il-programm tas-setup online:
make ARCH=um menuconfig
Se tlesti parzjalment l-assemblaġġ u juri kaxxa ta 'dialog għalik. Meta d-dawl jidher fil-qiegħ tat-tieqa[Select]', tista' tikkonfigura s-settings billi tuża l-Ispacebar jew it-tasti Enter. In-navigazzjoni madwar it-tieqa hija bħas-soltu billi tuża l-vleġeġ tat-tastiera "fuq" u "l isfel", u l-għażla tal-elementi hija "xellug" jew "lemin".
L-indikatur tal-vista -> ifisser li inti qiegħed f'submenu, li jista' jiġi aċċessat billi tuża ċ-ċavetta Enter. It-triq 'il barra hija ovvjament permezz ta' '[Exit]".
Inkludi l-għażliet li ġejjin fi '[Select]' u kun żgur li hemm simbolu '[*]' ħdejhom:
UML-specific Options:
- Host filesystem
Networking support (enable this to get the submenu to show up):
- Networking options:
- TCP/IP Networking
UML Network devices:
- Virtual network device
- SLiRP transport
Dak hu, tista' toħroġ minn din it-tieqa billi tagħżel b'mod sekwenzjali '[Exit]“. Kun żgur li fl-aħħar inti mitlub biex issalva l-konfigurazzjoni u agħżel '[Yes]".
Nirrakkomanda li tilgħab bl-għażliet tal-bini tal-qalba wara li taqra din il-kariga. Minn dawn l-esperimenti tista 'titgħallem ħafna dwar kif jaħdmu l-mekkaniżmi tal-qalba ta' livell baxx u kif bnadar differenti jaffettwaw kif tinbena l-qalba.
Bini tal-qalba
Il-kernel tal-Linux huwa programm kbir li jagħmel ħafna affarijiet. Anke b'din il-konfigurazzjoni minima fuq ħardwer antik, l-assemblaġġ jista 'jieħu żmien mhux ħażin. Allura ibni l-kernel billi tuża l-kmand li ġej:
make ARCH=um -j$(nproc)
Għalxiex? Dan il-kmand jgħid lill-bennej tagħna biex juża l-qlub u l-ħjut tas-CPU kollha disponibbli matul il-proċess tal-bini. Tim $(nproc) fl-aħħar ta 'Ibni ddaħħal l-output tal-kmand nproc, li hija parti coreutils fil-bini standard Ubuntu.
Wara xi żmien, il-qalba tagħna se tiġi kkompilata f'fajl eżekutibbli ./linux.
Installazzjoni tal-binarju
Peress li l-Modalità Utent fil-Linux toħloq binarju regolari, tista 'tinstallaha bħal kull utilità oħra. Hawn kif għamilt:
mkdir -p ~/bin
cp linux ~/bin/linux
Huwa wkoll ta 'min niżguraw li ~/bin huwa tiegħek $PATH:
Issa daħħal id-direttorju tas-sistema tal-fajls mistieden u neħħi l-pakkjar tal-arkivju:
cd uml-demo
tar xf ../alpine-rootfs.tgz
Il-passi deskritti se joħolqu mudell żgħir tas-sistema tal-fajls. Minħabba l-mod kif taħdem is-sistema, l-installazzjoni tal-pakketti permezz tal-maniġer tal-apk Alpine se tkun estremament diffiċli. Iżda din l-FS tkun biżżejjed biex tevalwa l-idea ġenerali.
Għandna bżonn ukoll għodda tini biex twaqqaf il-konsum tal-memorja proċessi zombie il-qalba mistieden tagħna.
wget -O tini https://github.com/krallin/tini/releases/download/v0.18.0/tini-static
chmod +x tini
Ħolqien ta 'Linja ta' Kmand tal-kernel
Il-kernel tal-Linux, bħall-biċċa l-kbira tal-programmi l-oħra, għandu argumenti tal-linja tal-kmand li jistgħu jiġu aċċessati billi tispeċifika ċ-ċavetta --help.
Hu nnifsu—jgħin
linux --help
User Mode Linux v5.1.16
available at http://user-mode-linux.sourceforge.net/
--showconfig
Prints the config file that this UML binary was generated from.
iomem=<name>,<file>
Configure <file> as an IO memory region named <name>.
mem=<Amount of desired ram>
This controls how much "physical" memory the kernel allocates
for the system. The size is specified as a number followed by
one of 'k', 'K', 'm', 'M', which have the obvious meanings.
This is not related to the amount of memory in the host. It can
be more, and the excess, if it's ever used, will just be swapped out.
Example: mem=64M
--help
Prints this message.
debug
this flag is not needed to run gdb on UML in skas mode
root=<file containing the root fs>
This is actually used by the generic kernel in exactly the same
way as in any other kernel. If you configure a number of block
devices and want to boot off something other than ubd0, you
would use something like:
root=/dev/ubd5
--version
Prints the version number of the kernel.
umid=<name>
This is used to assign a unique identity to this UML machine and
is used for naming the pid file and management console socket.
con[0-9]*=<channel description>
Attach a console or serial line to a host channel. See
http://user-mode-linux.sourceforge.net/old/input.html for a complete
description of this switch.
eth[0-9]+=<transport>,<options>
Configure a network device.
aio=2.4
This is used to force UML to use 2.4-style AIO even when 2.6 AIO is
available. 2.4 AIO is a single thread that handles one request at a
time, synchronously. 2.6 AIO is a thread which uses the 2.6 AIO
interface to handle an arbitrary number of pending requests. 2.6 AIO
is not available in tt mode, on 2.4 hosts, or when UML is built with
/usr/include/linux/aio_abi.h not available. Many distributions don't
include aio_abi.h, so you will need to copy it from a kernel tree to
your /usr/include/linux in order to build an AIO-capable UML
nosysemu
Turns off syscall emulation patch for ptrace (SYSEMU).
SYSEMU is a performance-patch introduced by Laurent Vivier. It changes
behaviour of ptrace() and helps reduce host context switch rates.
To make it work, you need a kernel patch for your host, too.
See http://perso.wanadoo.fr/laurent.vivier/UML/ for further
information.
uml_dir=<directory>
The location to place the pid and umid files.
quiet
Turns off information messages during boot.
hostfs=<root dir>,<flags>,...
This is used to set hostfs parameters. The root directory argument
is used to confine all hostfs mounts to within the specified directory
tree on the host. If this isn't specified, then a user inside UML can
mount anything on the host that's accessible to the user that's running
it.
The only flag currently supported is 'append', which specifies that all
files opened by hostfs will be opened in append mode.
Dan il-panel jenfasizza l-parametri ewlenin tat-tnedija. Ejja nħaddmu l-qalba bis-sett minimu meħtieġ ta 'għażliet:
linux
root=/dev/root
rootfstype=hostfs
rootflags=$HOME/prefix/uml-demo
rw
mem=64M
init=/bin/sh
Il-linji ta 'hawn fuq jgħidu lill-qalba tagħna dan li ġej:
Ejja nassumu li s-sistema tal-fajls tal-għeruq hija psewdo apparat /dev/root.
Agħżel hostfs bħala sewwieq tas-sistema tal-fajls tal-għeruq.
Immonta s-sistema tal-fajls mistieden li ħloqna fuq it-tagħmir tal-għeruq.
U iva, fil-modalità read-write.
Uża biss 64 megabytes ta 'RAM (tista' tuża ħafna inqas skont dak li qed tippjana li tagħmel, iżda 64 MB jidher li huwa l-aħjar ammont).
Il-qalba tibda awtomatikament /bin/sh kif init-proċess.
Mexxi dan il-kmand u għandek tikseb xi ħaġa bħal din li ġejja:
Folja oħra
Core dump limits :
soft - 0
hard - NONE
Checking that ptrace can change system call numbers...OK
Checking syscall emulation patch for ptrace...OK
Checking advanced syscall emulation patch for ptrace...OK
Checking environment variables for a tempdir...none found
Checking if /dev/shm is on tmpfs...OK
Checking PROT_EXEC mmap in /dev/shm...OK
Adding 32137216 bytes to physical memory to account for exec-shield gap
Linux version 5.1.16 (cadey@kahless) (gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)) #30 Sun Jul 7 18:57:19 UTC 2019
Built 1 zonelists, mobility grouping on. Total pages: 23898
Kernel command line: root=/dev/root rootflags=/home/cadey/dl/uml/alpine rootfstype=hostfs rw mem=64M init=/bin/sh
Dentry cache hash table entries: 16384 (order: 5, 131072 bytes)
Inode-cache hash table entries: 8192 (order: 4, 65536 bytes)
Memory: 59584K/96920K available (2692K kernel code, 708K rwdata, 588K rodata, 104K init, 244K bss, 37336K reserved, 0K cma-reserved)
SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
NR_IRQS: 15
clocksource: timer: mask: 0xffffffffffffffff max_cycles: 0x1cd42e205, max_idle_ns: 881590404426 ns
Calibrating delay loop... 7479.29 BogoMIPS (lpj=37396480)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
Mountpoint-cache hash table entries: 512 (order: 0, 4096 bytes)
Checking that host ptys support output SIGIO...Yes
Checking that host ptys support SIGIO on close...No, enabling workaround
devtmpfs: initialized
random: get_random_bytes called from setup_net+0x48/0x1e0 with crng_init=0
Using 2.6 host AIO
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
futex hash table entries: 256 (order: 0, 6144 bytes)
NET: Registered protocol family 16
clocksource: Switched to clocksource timer
NET: Registered protocol family 2
tcp_listen_portaddr_hash hash table entries: 256 (order: 0, 4096 bytes)
TCP established hash table entries: 1024 (order: 1, 8192 bytes)
TCP bind hash table entries: 1024 (order: 1, 8192 bytes)
TCP: Hash tables configured (established 1024 bind 1024)
UDP hash table entries: 256 (order: 1, 8192 bytes)
UDP-Lite hash table entries: 256 (order: 1, 8192 bytes)
NET: Registered protocol family 1
console [stderr0] disabled
mconsole (version 2) initialized on /home/cadey/.uml/tEwIjm/mconsole
Checking host MADV_REMOVE support...OK
workingset: timestamp_bits=62 max_order=14 bucket_order=0
Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254)
io scheduler noop registered (default)
io scheduler bfq registered
loop: module loaded
NET: Registered protocol family 17
Initialized stdio console driver
Using a channel type which is configured out of UML
setup_one_line failed for device 1 : Configuration failed
Using a channel type which is configured out of UML
setup_one_line failed for device 2 : Configuration failed
Using a channel type which is configured out of UML
setup_one_line failed for device 3 : Configuration failed
Using a channel type which is configured out of UML
setup_one_line failed for device 4 : Configuration failed
Using a channel type which is configured out of UML
setup_one_line failed for device 5 : Configuration failed
Using a channel type which is configured out of UML
setup_one_line failed for device 6 : Configuration failed
Using a channel type which is configured out of UML
setup_one_line failed for device 7 : Configuration failed
Using a channel type which is configured out of UML
setup_one_line failed for device 8 : Configuration failed
Using a channel type which is configured out of UML
setup_one_line failed for device 9 : Configuration failed
Using a channel type which is configured out of UML
setup_one_line failed for device 10 : Configuration failed
Using a channel type which is configured out of UML
setup_one_line failed for device 11 : Configuration failed
Using a channel type which is configured out of UML
setup_one_line failed for device 12 : Configuration failed
Using a channel type which is configured out of UML
setup_one_line failed for device 13 : Configuration failed
Using a channel type which is configured out of UML
setup_one_line failed for device 14 : Configuration failed
Using a channel type which is configured out of UML
setup_one_line failed for device 15 : Configuration failed
Console initialized on /dev/tty0
console [tty0] enabled
console [mc-1] enabled
Failed to initialize ubd device 0 :Couldn't determine size of device's file
VFS: Mounted root (hostfs filesystem) on device 0:11.
devtmpfs: mounted
This architecture does not have kernel memory protection.
Run /bin/sh as init process
/bin/sh: can't access tty; job control turned off
random: fast init done
/ #
Il-manipulazzjonijiet ta 'hawn fuq se jagħtuna sistema minima tal-mistieden, mingħajr affarijiet simili /proc jew isem tal-ospitant assenjat. Pereżempju, ipprova l-kmandi li ġejjin:
- uname -av
- cat /proc/self/pid
- hostname
Biex toħroġ mis-sistema mistieden, daħħal exit jew agħfas kontroll-d. Dan se jispara l-qoxra segwit minn paniku tal-qalba:
/ # exit
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000000
fish: “./linux root=/dev/root rootflag…” terminated by signal SIGABRT (Abort)
Aħna ltqajna dan il-paniku tal-qalba minħabba li l-qalba tal-Linux jaħseb li l-proċess tal-inizjalizzazzjoni dejjem għaddej. Mingħajrha, is-sistema ma tistax tiffunzjona aktar u tintefa. Iżda peress li dan huwa proċess tal-modalità tal-utent, ir-riżultat li jirriżulta jibgħat lilu nnifsu lil SIGABRT, li twassal għall-ħruġ.
Twaqqif ta' netwerk mistieden
Iżda dan huwa fejn l-affarijiet jibdew imorru ħażin għalina. In-netwerking fil-Modalità tal-Utent Linux huwa fejn il-kunċett kollu ta '"modalità tal-utent" limitat jibda jinqasam. Wara kollox, in-netwerk ġeneralment ikun limitat fil-livell tas-sistema privileġġjat modi ta 'eżekuzzjoni għal raġunijiet ovvji għalina lkoll.
Nota per.: Tista 'taqra aktar dwar għażliet differenti biex taħdem ma' netwerk f'UML hawn.
Vjaġġ biex slirp
Madankollu, hemm għodda antika u prattikament mhux appoġġjata msejħa Slirp, li biha User Mode Linux jista' jinteraġixxi man-netwerk. Topera bejn wieħed u ieħor bħal munzell TCP/IP fil-livell tal-utent u ma teħtieġ l-ebda permess tas-sistema biex taħdem. Din l-għodda kienet rilaxxat fl-1995, u l-aħħar aġġornament huwa datat 2006. Slirp huwa antik ħafna. Matul iż-żmien mingħajr appoġġ u aġġornamenti, kompilaturi waslu tant li issa din l-għodda tista 'tiġi deskritta biss bħala "taħsir tal-kodiċi".
Allura, ejja tniżżel Slirp mir-repożitorji ta 'Ubuntu u nipprova tħaddem:
sudo apt-get install slirp
/usr/bin/slirp
Slirp v1.0.17 (BETA)
Copyright (c) 1995,1996 Danny Gasparovski and others.
All rights reserved.
This program is copyrighted, free software.
Please read the file COPYRIGHT that came with the Slirp
package for the terms and conditions of the copyright.
IP address of Slirp host: 127.0.0.1
IP address of your DNS(s): 1.1.1.1, 10.77.0.7
Your address is 10.0.2.15
(or anything else you want)
Type five zeroes (0) to exit.
[autodetect SLIP/CSLIP, MTU 1500, MRU 1500, 115200 baud]
SLiRP Ready ...
fish: “/usr/bin/slirp” terminated by signal SIGSEGV (Address boundary error)
Oh allat tiegħi. Ejja ninstallaw id-debugger Slirp u naraw jekk nistgħux insemmu x'inhu għaddej hawn:
sudo apt-get install gdb slirp-dbgsym
gdb /usr/bin/slirp
GNU gdb (Ubuntu 8.1-0ubuntu3) 8.1.0.20180409-git
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/bin/slirp...Reading symbols from /usr/lib/debug/.build-id/c6/2e75b69581a1ad85f72ac32c0d7af913d4861f.debug...done.
done.
(gdb) run
Starting program: /usr/bin/slirp
Slirp v1.0.17 (BETA)
Copyright (c) 1995,1996 Danny Gasparovski and others.
All rights reserved.
This program is copyrighted, free software.
Please read the file COPYRIGHT that came with the Slirp
package for the terms and conditions of the copyright.
IP address of Slirp host: 127.0.0.1
IP address of your DNS(s): 1.1.1.1, 10.77.0.7
Your address is 10.0.2.15
(or anything else you want)
Type five zeroes (0) to exit.
[autodetect SLIP/CSLIP, MTU 1500, MRU 1500, 115200 baud]
SLiRP Ready ...
Program received signal SIGSEGV, Segmentation fault.
ip_slowtimo () at ip_input.c:457
457 ip_input.c: No such file or directory.
L-iżball qed iħabbat fuqna din il-linja. Ejja nħarsu lejn l-istacktrace, forsi xi ħaġa tgħinna hemm:
(gdb) bt full
#0 ip_slowtimo () at ip_input.c:457
fp = 0x55784a40
#1 0x000055555556a57c in main_loop () at ./main.c:980
so = <optimized out>
so_next = <optimized out>
timeout = {tv_sec = 0, tv_usec = 0}
ret = 0
nfds = 0
ttyp = <optimized out>
ttyp2 = <optimized out>
best_time = <optimized out>
tmp_time = <optimized out>
#2 0x000055555555b116 in main (argc=1, argv=0x7fffffffdc58) at ./main.c:95
No locals.
Hawnhekk naraw li l-ħabta sseħħ waqt l-istartjar tal-linja prinċipali, meta slirp jipprova jiċċekkja l-timeouts. Kien f'dan il-mument li kelli nieqaf milli nipprova niddebug. Imma ejja naraw jekk Slirp, mibnija minn xorta, jaħdem. Erġajt niżżilt l-arkivju direttament mis-sit Sourceforge, għax tkaxkir xi ħaġa minn hemm permezz tal-linja tal-kmand hija uġigħ:
cd ~/dl
wget https://xena.greedo.xeserv.us/files/slirp-1.0.16.tar.gz
tar xf slirp-1.0.16.tar.gz
cd slirp-1.0.16/src
./configure --prefix=$HOME/prefix/slirp
make
Hawnhekk naraw twissijiet dwar funzjonijiet inkorporati mhux definiti, jiġifieri dwar l-impossibbiltà li torbot il-fajl binarju li jirriżulta. Jidher li bejn l-2006 u issa gcc waqaf joħloq simboli użati f'funzjonijiet intermedji mibnija. Ejja nippruvaw nissostitwixxu l-keyword inline għal kumment vojt u ħares lejn ir-riżultat:
vi slirp.h
:6
a
<enter>
#define inline /**/
<escape>
:wq
make
Le. Dan lanqas ma jaħdim. Għadu ma tistax issib simboli għal dawn il-funzjonijiet.
F'dan il-punt ċeda u bdejt infittex fuq Github Heroku jibni pakketti. It-teorija tiegħi kienet li xi pakkett tal-bini Heroku kien ikun fih il-binarji li kelli bżonn. Fl-aħħar, it-tfittxija tiegħi wasslitni hawnhekk. Niżżilt u żppakkjat uml.tar.gz u sabet dan li ġej:
total 6136
-rwxr-xr-x 1 cadey cadey 79744 Dec 10 2017 ifconfig*
-rwxr-xr-x 1 cadey cadey 373 Dec 13 2017 init*
-rwxr-xr-x 1 cadey cadey 149688 Dec 10 2017 insmod*
-rwxr-xr-x 1 cadey cadey 66600 Dec 10 2017 route*
-rwxr-xr-x 1 cadey cadey 181056 Jun 26 2015 slirp*
-rwxr-xr-x 1 cadey cadey 5786592 Dec 15 2017 uml*
-rwxr-xr-x 1 cadey cadey 211 Dec 13 2017 uml_run*
Dan huwa binarju slirp! Jaħdem?
./slirp
Slirp v1.0.17 (BETA) FULL_BOLT
Copyright (c) 1995,1996 Danny Gasparovski and others.
All rights reserved.
This program is copyrighted, free software.
Please read the file COPYRIGHT that came with the Slirp
package for the terms and conditions of the copyright.
IP address of Slirp host: 127.0.0.1
IP address of your DNS(s): 1.1.1.1, 10.77.0.7
Your address is 10.0.2.15
(or anything else you want)
Type five zeroes (0) to exit.
[autodetect SLIP/CSLIP, MTU 1500, MRU 1500]
SLiRP Ready ...
Ma taqax - għalhekk għandha taħdem! Ejja nħawlu dan il-binarju ~/bin/slirp:
cp slirp ~/bin/slirp
F'każ li l-kreatur tal-pakkett ineħħih, I għamel mera.
L-ewwel żewġ kmandi tal-konfigurazzjoni /proc и /sys meħtieġa għax-xogħol ifconfig, li jistabbilixxi interface tan-netwerk biex jikkomunika ma' Slirp. Tim route jistabbilixxi t-tabella tar-routing tal-kernel biex iġġiegħel it-traffiku kollu jintbagħat mill-mina Slirp. Ejja niċċekkjaw dan b'mistoqsija DNS:
Nota per.: Apparentement, il-post oriġinali kien miktub fuq desktop b'karta tan-netwerk bil-fili, jew xi konfigurazzjoni oħra li ma teħtieġx sewwieqa addizzjonali. Fuq laptop b'WiFi 8265 minn Intel, iseħħ żball meta tgħolli n-netwerk
/ # ifconfig eth0 10.0.2.14 netmask 255.255.255.240 broadcast 10.0.2.15
slirp_tramp failed - errno = 2
ifconfig: ioctl 0x8914 failed: No such file or directory
/ #
Apparentement, il-kernel ma jistax jikkomunika mas-sewwieq tad-drajv tan-netwerk. Attentat biex jinġabar il-firmware fil-qalba, sfortunatament, ma kkoreġix is-sitwazzjoni. Fiż-żmien tal-pubblikazzjoni, għadha ma setgħet tinstab l-ebda soluzzjoni f'din il-konfigurazzjoni partikolari. Fuq konfigurazzjonijiet aktar sempliċi (per eżempju, f'Virtualbox), l-interface titqajjem b'mod korrett.
Ejja awtomatizzaw ir-ridirezzjoni billi tuża l-iskript tal-qoxra li ġej:
U mbagħad ejja nagħmlu bidliet fil-linja tal-kmand tal-kernel:
linux
root=/dev/root
rootfstype=hostfs
rootflags=$HOME/prefix/uml-demo
rw
mem=64M
eth0=slirp,,$HOME/bin/slirp
init=/init.sh
U ejja nirrepetu:
SLiRP Ready ...
networking set up
/bin/sh: can't access tty; job control turned off
nslookup google.com 8.8.8.8
Server: 8.8.8.8
Address 1: 8.8.8.8 dns.google
Name: google.com
Address 1: 172.217.12.206 lga25s63-in-f14.1e100.net
Address 2: 2607:f8b0:4004:800::200e iad30s09-in-x0e.1e100.net
In-netwerk huwa stabbli!
fajl docker
Biex tagħmilha aktar faċli għalik li tiċċekkja dan kollu, ġabar dockerfile, li awtomatizza ħafna mill-passi deskritti u għandha tagħtik konfigurazzjoni ta' ħidma. Għandi wkoll konfigurazzjoni tal-qalba lesta, li fih dak kollu deskritt fil-post. Iżda huwa importanti li tifhem li hawn spjegajt biss is-settings minimi.
Nittama li din il-kariga għenet tifhem kif tqajjem kernel mistieden. Irriżulta li kien xi tip ta 'mostru, iżda l-pubblikazzjoni kienet maħsuba bħala gwida komprensiva dwar is-suġġett tal-assemblaġġ, l-installazzjoni u l-konfigurazzjoni tal-Modalità tal-Utent fil-Linux taħt verżjonijiet moderni tas-sistemi operattivi ta' din il-familja. Il-passi sussegwenti għandhom jinkludu l-installazzjoni tas-servizzi u softwer ieħor diġà fis-sistema mistieden. Peress li l-immaġini tal-kontejners Docker huma biss tarballs promossi, għandek tkun tista 'tiġbed l-immaġni permezz docker export, u mbagħad iddetermina l-mogħdija biex tinstallaha fl-għerq tas-sistema tal-fajl tal-kernel mistieden. Ukoll, imbagħad mexxi l-iskrittura tal-qoxra.
Grazzi speċjali lil Rkeene minn #lobsters fuq Freenode. Mingħajr l-għajnuna tiegħu fid-debugging ta 'Slirp, ma kontx wasalt s'issa. M'għandi l-ebda idea kif is-sistema Slackware tiegħu taħdem b'mod korrett bi slirp, iżda s-sistemi Ubuntu u Alpini tiegħi ma aċċettawx slirp u r-Rkeene binarju ssuġġerieli. Iżda huwa biżżejjed għalija li għall-inqas xi ħaġa taħdem għalija.