Mokhoa oa ho qala ho sebelisa Mokhoa oa Mosebelisi ho Linux

Selelekela se tswang ho mofetoledi: Kaha mefuta e fapaneng ya dikontenara e fetoha karolo e kgolo ya maphelo a rona, ho ka ba monate haholo mme ha thusa ho ithuta ka mahlale a qadileng tsohle. Tse ding tsa tsona di ntse di ka sebediswa ka tsela e molemo kajeno, empa ha se bohle ba di hopolang (kapa ba tsebang ka tsona, haeba di ne di le siyo nakong ya ntshetsopele ya tsona e potlakileng). Theknoloji e nngwe e jwalo ke Mokgwa wa Mosebelisi. LinuxMongoli oa pele o ile a etsa lipatlisiso tse ngata, a fumana hore na ke mekhoa efe ea khale e ntseng e sebetsa le hore na ke efe e sa sebetseng, 'me a kopanya ntho e kang tataiso ea mohato ka mohato ea hore na u ka iketsetsa UML ea hau ea lapeng joang ka 2k19. 'Me e, re memile mongoli oa pele ho Habr. Cadey, kahoo haeba u na le lipotso - botsa ka Senyesemane ho litlhaloso.

Mokhoa oa ho qala ho sebelisa Mokhoa oa Mosebelisi ho Linux

Mokhoa oa Mosebelisi ho Linux - ha e le hantle ena ke kou ea kernel Linux Mokhoa ona o o dumella ho tsamaisa kernel e felletseng Linux e le ts'ebetso ea mosebelisi 'me hangata e sebelisoa ke bahlahisi bakeng sa liteko tsa bakhanni. Leha ho le joalo, mokhoa ona o boetse o na le thuso e le sesebelisoa se akaretsang sa ho itšehla thajana, se tšoanang ka molao-motheo le kamoo mechine ea sebele e sebetsang kateng. Mokhoa ona o fana ka ho itšehla thajana ho feta Docker, empa o ka tlase ho mochini o felletseng oa sebele joalo ka KVM kapa Virtual Box.

Ka kakaretso, Mokhoa oa Mosebelisi o ka bonahala e le sesebelisoa se makatsang le se thata ho se sebelisa, empa se na le melemo ea sona. Etsoe, ke sesebelisoa se felletseng Linux- kernel e sebetsang e le mosebelisi ea se nang litokelo. Tšobotsi ena e lumella khoutu e ka 'nang ea se tšepahale ho sebetsa ntle le tšokelo ho mochini oa moamoheli. 'Me kaha ke kernel e felletseng, lits'ebetso tsa eona li arotsoe ho mochini oa moamoheli, ho bolelang lits'ebetso tse sebetsang ka har'a Mokhoa oa Mosebelisi li ke ke tsa bonahala ho moamoheli. Sena ha se tšoane le sejana se tloaelehileng sa Docker, moo mochini o amohelang o lulang o bona lits'ebetso kahare ho polokelo. Sheba sengoathoana sena sa pstree ho tsoa ho e 'ngoe ea li-server tsa ka:

containerd─┬─containerd-shim─┬─tini─┬─dnsd───19*[{dnsd}]
           │                 │      └─s6-svscan───s6-supervise
           │                 └─10*[{containerd-shim}]
           ├─containerd-shim─┬─tini─┬─aerial───21*[{aerial}]
           │                 │      └─s6-svscan───s6-supervise
           │                 └─10*[{containerd-shim}]
           ├─containerd-shim─┬─tini─┬─s6-svscan───s6-supervise
           │                 │      └─surl
           │                 └─9*[{containerd-shim}]
           ├─containerd-shim─┬─tini─┬─h───13*[{h}]
           │                 │      └─s6-svscan───s6-supervise
           │                 └─10*[{containerd-shim}]
           ├─containerd-shim─┬─goproxy───14*[{goproxy}]
           │                 └─9*[{containerd-shim}]
           └─32*[{containerd}]

'Me u bapise sena le pstree ea kernel Linux Mokhoa oa Mosebelisi:

linux─┬─5*[linux]
      └─slirp

Ha ke sebetsa ka dikontena tsa Docker, ke kgona ho bona mabitso a ditshebetso tse sebetsang tsamaisong ya baeti ho tswa ho moamoheli. Linux Mokhoa oa mosebelisi ha o khonehe. See se bolela'ng? Ho bolela hore lisebelisoa tsa ho beha leihlo tse sebetsang ka har'a sistimi e nyane ea tlhahlobo Linux (LinuxSistimi e nyenyane ea tlhahlobo ea libuka) ha ke bone mekhoa e sebetsang tsamaisong ea baeti. Empa maemong a mang, tšobotsi ena e ka fetoha sabole e sehang ka nģa tse peli.

Ka kakaretso, poso eohle e ka tlase ke pokello ea lipatlisiso le boiteko bo matla ba ho fumana sephetho se lakatsehang. Ho etsa sena, ke ne ke tlameha ho sebelisa lisebelisoa tse fapaneng tsa khale, ho bala mehloli ea kernel, ho kenella ka mokhoa o matla oa ho lokisa khoutu e ngotsoeng ha ke ntse ke le sekolong sa mathomo, hape ke tinker le Heroku e haha ​​​​ka ho sebelisa binary e khethehileng ho batla lisebelisoa tseo ke neng ke li hloka. Mosebetsi ona kaofela o ile oa etsa hore bahlankana ba IRC ea ka ba mpitse moloi. Ke tšepa hore poso ena e tla sebetsa e le litokomane tse ka tšeptjoang hore motho a etse ntho e tšoanang, empa ka li-kernel tse ncha le mefuta ea OS.

phetoho

phetoho Linux Mokhoa oa mosebelisi o etsoa ka mekhahlelo e 'maloa:

  • ho kenya litšepe ho moamoheli;
  • ho jarolla kernel Linux;
  • tlhophiso ea kernel build;
  • kopano ea kernel;
  • ho kenya binary;
  • ho hlophisa sistimi ea faele ea moeti;
  • khetho ea liparamente tsa ho qala kernel;
  • ho theha marang-rang a baeti;
  • ho qala thollo ea moeti.

Ke nahana hore haeba u etsa qeto ea ho iketsetsa tsena tsohle, ho ka etsahala hore u etse sohle se hlalositsoeng ho tse ling Ubuntu kapa Debian-e tšoanang le sistimi. Ke lekile ho kenya tšebetsong ntho e 'ngoe le e 'ngoe e hlalositsoeng kaholimo kabong eo ke e ratang haholo, Alpine, empa ha ho letho le ileng la sebetsa, ho bonahala eka ke hobane kernel Linux e na le khokahano e thata ho glibc-isms bakeng sa bakhanni ba mokhoa oa mosebelisi. Ke rera ho tlaleha sena ho ea holimo kamora hore ke utloisise bothata ka botlalo.

Ho kenya litšepeho ho moamoheli

Ubuntu e hloka bonyane liphutheloana tse latelang ho haha ​​​​kernel Linux (ho nahanoa hore ho kentsoe ho hlwekile):

- 'build-essential'
- 'flex'
- 'bison'
- 'xz-utils'
- 'wget'
- 'ca-certificates'
- 'bc'
- 'linux-headers'

U ka li kenya ka taelo e latelang (joalo ka motso kapa ka sudo):

apt-get -y install build-essential flex bison xz-utils wget ca-certificates bc 
                   linux-headers-$(uname -r)

Ka kopo hlokomela hore ho tsamaisa lenaneo la ho seta lenane la kernel Linux e tla hloka ho kenngoa libncurses-dev. Ka kopo etsa bonnete ba hore e kentsoe ka taelo e latelang (joalo ka motso kapa ka sudo):

apt-get -y install libncurses-dev

Kernel download

Etsa qeto ea hore na u ka khoasolla hokae ebe u haha ​​​​kernel. Bakeng sa ts'ebetso ena, o tla hloka ho fana ka hoo e ka bang 1,3 GB ea sebaka sa hard disk, kahoo etsa bonnete ba hore u na le sona.

Ebe u ea ho kernel.org 'me u fumane URL ea ho khoasolla kernel ea morao-rao e tsitsitseng. Ka nako ea ho ngola sena ke: https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.1.16.tar.xz

Khoasolla faele ena u sebelisa 'wget':

wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.1.16.tar.xz

'Me u e ntše ka eona 'tar':

tar xJf linux-5.1.16.tar.xz

Joale re kenya bukana e entsoeng ha re notlolla tarball:

cd linux-5.1.16

Ho theha sebopeho sa kernel

Sistimi ea ho aha kernel ke sete Makefiles с tse ngata lisebelisoa tse tloahelehileng le mengolo ho iketsetsa ts'ebetso. Ntlha ea pele, bula lenaneo la ho seta le sebetsanang:

make ARCH=um menuconfig

E tla u hahela ka mokhoa o itseng le ho u bontša lebokose la puisano. Neng '[Select]', o tla khona ho hlophisa o sebelisa linotlolo tsa Space kapa Enter. Tsamaea ka fensetere, joalo ka tloaelo, ka metsu ea keyboard "holimo" le "down", 'me u khethe likarolo - "ka ho le letšehali" kapa "ka ho le letona".

Sesupo sa pono —> se bolela hore o ho menu e nyane, e fihlellehang ka konopo ea Enter. Ho hlakile hore tsela ea ho tsoa ho eona ke ka '[Exit]'.

Kenyelletsa likhetho tse latelang ho '[Select]' 'me u netefatse hore ho na le letšoao la '[*]' haufi le bona:

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

Ke eona, o ka tsoa fensetereng ena ka ho khetha ka tatellano '[Exit]'. Etsa bonnete ba hore u susumelletseha ho boloka tlhophiso qetellong ebe u khetha '[Yes]'.

Ke khothaletsa hore o bapale hohle ka likhetho tsa kernel build kamora ho bala poso ena. Ka liteko tsena, u ka ithuta ho hongata mabapi le ho utloisisa mosebetsi oa kernel mechanics ea boemo bo tlase le phello ea lifolakha tse fapaneng kopanong ea eona.

Ho haha ​​koro

Ntho ea bohlokoa Linux Ke lenaneo le leholo le etsang lintho tse ngata. Esita le ka tlhophiso ena e nyane, ho e haha ​​holim'a hardware ea khale ho ka nka nako e telele. Ka hona, haha ​​​​kernel u sebelisa taelo e latelang:

make ARCH=um -j$(nproc)

Molelmong oa eng? Taelo ena e tla bolella sehahi sa rona ho sebelisa li-cores tsohle tse teng tsa CPU le likhoele ts'ebetsong ea kaho. Sehlopha $(nproc) qetellong ea Build substitutes tlhahiso ea taelo nproc, e leng karolo coreutils kopanong e tloaelehileng Ubuntu.

Kamora nako e itseng, kernel ea rona e tla bokelloa hore e be faele e sebetsang ./linux.

Ho kenya binary

Kaha Mokhoa oa Mosebelisi o kene Linux E etsa binary e tloaelehileng, kahoo o ka e kenya joalo ka sesebelisoa leha e le sefe se seng. Ke entse joalo ka tsela ena:

mkdir -p ~/bin
cp linux ~/bin/linux

Hape ke habohlokoa ho etsa bonnete ba hore ~/bin e ho hao $PATH:

export PATH=$PATH:$HOME/bin

Ho theha sistimi ea faele ea moeti

Theha lethathamo bakeng sa sistimi ea faele ea moeti:

mkdir -p $HOME/prefix/uml-demo
cd $HOME/prefix

Bula alpinelinux.org le ho kena download karolo fumana sehokelo sa 'nete sa ho jarolla MINI ROOT FILESYSTEM. Nakong ea ho ngola sena e ne e le:

http://dl-cdn.alpinelinux.org/alpine/v3.10/releases/x86_64/alpine-minirootfs-3.10.0-x86_64.tar.gz

Khoasolla tarball ena u sebelisa wget:

wget -O alpine-rootfs.tgz http://dl-cdn.alpinelinux.org/alpine/v3.10/releases/x86_64/alpine-minirootfs-3.10.0-x86_64.tar.gz

Joale kenya bukana ea sistimi ea faele ea moeti 'me u ntše li-archive:

cd uml-demo
tar xf ../alpine-rootfs.tgz

Liketso tse hlalositsoeng li tla etsa template e nyenyane ea tsamaiso ea lifaele. Ka lebaka la sebopeho sa sistimi, ho tla ba thata haholo ho kenya liphutheloana ka mookameli oa apk oa Alpine. Empa FS ena e tla lekana ho lekola mohopolo o akaretsang.

Re boetse re hloka sesebelisoa e nyane ho thibela tshebediso ya mohopolo mekhoa ea zombie kernel ea rona ea moeti.

wget -O tini https://github.com/krallin/tini/releases/download/v0.18.0/tini-static
chmod +x tini

Ho theha Kernel Command Line

Ka hare ho motheo Linux, joalo ka mananeo a mang a mangata, ho na le mabaka a mola oa taelo a ka fihlellehang ka ho totobatsa senotlolo --help.

Ka boeena—thuso

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.

Phanele ena e totobatsa lintlha tse kholo tsa ho qala. Ha re tsamaise kernel ka likhetho tse fokolang tse hlokahalang:

linux 
  root=/dev/root 
  rootfstype=hostfs 
  rootflags=$HOME/prefix/uml-demo 
  rw 
  mem=64M 
  init=/bin/sh

Mela e ka holimo e bolella kernel ea rona tse latelang:

  • Nka hore metso ea lifaele ke sesebelisoa sa pseudo /dev/root.
  • Khetha hostfs joalo ka mokhanni oa tsamaiso ea metso.
  • Kenya sistimi ea baeti eo re e entseng sesebelisoa sa motso.
  • 'Me e, ka mokhoa oa ho bala-ngola.
  • Sebelisa feela 64 MB ea RAM (o ka sebelisa e fokolang haholo ho latela seo u rerileng ho se etsa, empa 64 MB e bonahala e le chelete e lekaneng).
  • Kernel e qala ka bo eona /bin/sh kamoo init- mokhoa.

Matha taelo ena 'me u lokela ho fumana ntho e kang e latelang:

Letlapa le leng hape

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
/ # 

Liphetoho tse ka holimo li tla re fa tsamaiso ea baeti bonyane, ntle le lintho tse kang /proc kapa lebitso la moamoheli le abetsoeng. Ka mohlala, leka litaelo tse latelang:

- uname -av
- cat /proc/self/pid
- hostname

Ho tsoa ho moeti, thaepa exit kapa tobetsa control-d. Sena se tla bolaea khetla e lateloang ke kernel panic:

/ # exit
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000000
fish: “./linux root=/dev/root rootflag…” terminated by signal SIGABRT (Abort)

Re tšohile haholo hobane kernel Linux e nka hore ts'ebetso ea ho qala e lula e sebetsa. Ntle le eona, sistimi e ke ke ea hlola e sebetsa 'me ea fela. Empa kaha ena ke ts'ebetso ea mokhoa oa mosebelisi, tlhahiso e hlahang e ithomella ho SIGABRT, e lebisang ho tsoa.

Tlhophiso ea marang-rang ea baeti

Empa mona ke moo lintho li qalang ho senyeha. Marang-rang a Mokhoa oa Basebelisi Linux — mona ke moo mohopolo oohle oa "mokhoa oa mosebelisi" o lekanyelitsoeng o qalang ho putlama. Etsoe, boemong ba sistimi, marang-rang hangata a lekanyelitsoe. lehlohonolo mekhoa ea ho bolaoa ka mabaka a utloahalang kaofela ha rona.

Hlokomela. ka.: U ka bala haholoanyane ka likhetho tse fapaneng tsa ho sebetsa le marang-rang ho UML mona.

Leeto la ho Slirp

Leha ho le joalo, ho na le sesebelisoa sa khale se batlang se sa tšehetsoe se bitsoang Slirp, ka thuso ea Mokhoa oa Mosebelisi oo Linux e ka sebelisana le netweke. E sebetsa ka tsela e itseng joaloka stack TCP/IP boemong ba mosebelisi mme ha e hloke tumello efe kapa efe ea sistimi ho sebetsa. Sesebelisoa sena e ne e le e lokollotsoe ka 1995, 'me ntlafatso ea ho qetela e ngotsoe ka nako 2006. Slirp o tsofetse haholo. Nakong eo ntle le ts'ehetso le lisebelisoa, bahlophisi ba tsamaile ho fihlela joale sesebelisoa sena se ka hlalosoa feela e le ho bola ha khoutu.

Kahoo, ha re jarolleng Slirp ho tsoa libakeng tsa polokelo. Ubuntu 'me ha re lekeng ho e tsamaisa:

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)

Oho melimo. Ha re kenyeng debugger ea Slirp 'me re bone hore na re ka tseba se etsahalang mona:

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.

Phoso e ntse e re otla mola ona. Ha re shebeng stacktrace, mohlomong ho na le ho tla re thusa moo:

(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.

Mona re bona hore ho oa ho etsahala nakong ea ho qala ha loop e kholo, ha slirp e leka ho hlahloba nako ea ho fela. Ke nakong ena moo ke ileng ka tlameha ho tlohela ho leka ho lokisa bothata. Empa ha re boneng hore na Slirp, e hahiloeng ka mefuta, e sebetsa. Ke ile ka khoasolla polokelo ea litaba ka kotloloho sebakeng sa marang-rang Mohloli oa matlafatso, hobane ho hula ntho ho tloha moo ka mohala oa taelo ho bohloko:

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

Mona re bona litlhokomeliso mabapi le mesebetsi e hahelletsoeng e sa hlalosoang, ke hore, mabapi le ho se khone ho hokahanya faele ea binary e hlahisitsoeng. Ho bonahala eka pakeng tsa 2006 le ntlha ena, gcc e emisitse ho hlahisa matšoao a sebelisoang mesebetsing e hahelletsoeng ea lifaele tse kopaneng tse mahareng. Ha re leke ho fetola lebitso la sehlooho inline ka maikutlo a se nang letho 'me u shebe sephetho:

vi slirp.h
:6
a
<enter>
#define inline /**/
<escape>
:wq
make

Che. Sena le sona ha se sebetse. E ntse e sa fumane matšoao bakeng sa mesebetsi ena.

Ka nako ena, ke ile ka tela mme ka qala ho sheba Github Heroku haha ​​liphutheloana. Khopolo ea ka e ne e le hore sephutheloana se seng sa Heroku se tla ba le li-binary tseo ke li hlokang. Qetellong, phuputso e ile ea ntsamaisa mona. Ke ile ka khoasolla le ho phutha uml.tar.gz mme o fumane tse latelang:

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*

Ena ke binary e thellang! Na oa sebetsa?

./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 ...

Ha e senyehe - kahoo e lokela ho sebetsa! Ha re leme binary ena ho ~/bin/slirp:

cp slirp ~/bin/slirp

Haeba moetsi oa sephutheloana a ka e tlosa, I e entseng seipone.

Tlhophiso ea marang-rang

Joale ha re theheng marang-rang ho kernel ea rona ea baeti. Ntlafatsa likhetho tsa ho qala:

linux 
  root=/dev/root 
  rootfstype=hostfs 
  rootflags=$HOME/prefix/uml-demo 
  rw 
  mem=64M 
  eth0=slirp,,$HOME/bin/slirp 
  init=/bin/sh

Joale ha re bulele marang-rang:

mount -t proc proc proc/
mount -t sysfs sys sys/

ifconfig eth0 10.0.2.14 netmask 255.255.255.240 broadcast 10.0.2.15
route add default gw 10.0.2.2

Litaelo tse peli tsa pele tsa tlhophiso /proc и /sys e hlokahalang bakeng sa mosebetsi ifconfig, e behang sebopeho sa marang-rang ho buisana le Slirp. Sehlopha route e seta tafole ea ho tsamaisa kernel ho qobella sephethephethe sohle ho romelloa ka kotopo ea Slirp. Ha re hlahlobeng sena ka potso ea DNS:

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:4006:81b::200e lga25s63-in-x0e.1e100.net

E sebetsa!

Tlhokomeliso ka.: Kamoo ho bonahalang kateng, poso ea pele e ne e ngotsoe k'homphieutheng e nang le karete ea marang-rang e nang le mohala, kapa tlhophiso e 'ngoe e sa hlokeng bakhanni ba eketsehileng. Ho laptop e nang le WiFi 8265 ho tloha Intel, phoso e etsahala ha ho phahamisa marang-rang

/ # 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
/ #

Kamoo ho bonahalang kateng, kernel ha e khone ho buisana le mokhanni oa karete ea marang-rang. Boiteko ba ho bokella firmware ka kernel, ka bomalimabe, ha boa ka ba lokisa boemo. Nakong ea phatlalatso, ho ne ho sa khonehe ho fumana tharollo tlhophisong ena. Ho li-configs tse bonolo (mohlala, ho Virtualbox), sebopeho se nyoloha ka nepo.

Ha re ikemisetseng ho tsamaisa hape ka mongolo o latelang oa khetla:

#!/bin/sh
# init.sh

mount -t proc proc proc/
mount -t sysfs sys sys/
ifconfig eth0 10.0.2.14 netmask 255.255.255.240 broadcast 10.0.2.15
route add default gw 10.0.2.2

echo "networking set up"

exec /tini /bin/sh

'Me u tšoaee e ka phethahatsoa:

chmod +x init.sh

'Me joale re tla etsa liphetoho moleng oa taelo oa kernel:

linux 
  root=/dev/root 
  rootfstype=hostfs 
  rootflags=$HOME/prefix/uml-demo 
  rw 
  mem=64M 
  eth0=slirp,,$HOME/bin/slirp 
  init=/init.sh

Mme ha re pheteng:

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

Marang-rang a tsitsitse!

faele ea docker

Ho etsa hore ho be bonolo ho uena ho hlahloba tsena tsohle, ke bokelletse dockerfile, e iketsetsang boholo ba mehato e hlalositsoeng mme e lokela ho u fa tlhophiso ea ho sebetsa. Le 'na ke na le kernel e hlophisitsoeng esale pele, e nang le ntho e 'ngoe le e' ngoe e hlalositsoeng posong. Empa ke habohlokoa ho utloisisa hore mona ke hlalositse feela boemo bo fokolang.

Ke tšepa hore poso ena e u thusitse ho utloisisa mokhoa oa ho etsa hore kernel ea moeti e sebetse. Ke ntho e makatsang hanyane, empa sepheo e ne e le ho fana ka tataiso e felletseng mabapi le ho haha, ho kenya le ho hlophisa Mokhoa oa Mosebelisi. Linux tlas'a mefuta ea sejoale-joale ea litsamaiso tse sebetsang tsa lelapa lena. Mehato e latelang e lokela ho kenyelletsa ho kenya lits'ebeletso le software e 'ngoe ka har'a sistimi ea baeti. Kaha litšoantšo tsa setshelo sa Docker ke li-tarball tse phahamisitsoeng, u lokela ho khona ho ntša setšoantšo ka docker export, ebe u khetha tsela ea ho e kenya motso oa sistimi ea faele ea moeti. Joale, tsamaisa script ea khetla.

Liteboho tse khethehileng ho Rkeene ho tsoa ho #lobsters ho Freenode. Ntle le thuso ea hae ea ho lokisa liphoso ho Slirp, nka be ke sa fihla mona. Ha ke na leseli la hore na sistimi ea hae ea Slackware e sebetsa hantle joang le slirp, empa litsamaiso tsa ka lia sebetsa. Ubuntu 'me Alpine ha a ka a amohela slirp 'me binary Rkeene e ile ea mpha. Empa ho lekane ho 'na hore bonyane ho na le ntho e sebetsang.

Source: www.habr.com

Reka sebaka se tšepahalang sa libaka tse nang le ts'ireletso ea DDoS, li-server tsa VPS VDS 🔥 Reka sebaka se tšepahalang sa ho amohela webosaete ka tšireletso ea DDoS, li-server tsa VPS VDS | ProHoster