αžšαž”αŸ€αž”αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ User Mode αž“αŸ…αž€αŸ’αž“αž»αž„αž›αžΈαž“αž»αž…

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž–αžΈαž’αŸ’αž“αž€αž”αž€αž”αŸ’αžšαŸ‚αŸ– αž”αŸ’αžšαž†αžΆαŸ†αž„αž“αžΉαž„αž•αŸ’αž‘αŸƒαžαžΆαž„αž€αŸ’αžšαŸ„αž™αž“αŸƒαž€αžΆαžšαž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž‡αžΈαžœαž·αžαžšαž”αžŸαŸ‹αž™αžΎαž„αž“αžΌαžœαž’αž»αž„αž‡αžΆαž…αŸ’αžšαžΎαž“αž”αŸ’αžšαž—αŸαž‘ αžœαžΆαž’αžΆαž…αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸ αž“αž·αž„αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαŸ’αžœαŸ‚αž„αž™αž›αŸ‹αžαžΆαžαžΎαž”αž…αŸ’αž…αŸαž€αžœαž·αž‘αŸ’αž™αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžœαžΆαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž˜αŸ’αžαž„αŸ” αž–αž½αž€αžœαžΆαžαŸ’αž›αŸ‡αž’αžΆαž…αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αžΆαž“αž™αŸ‰αžΆαž„αž˜αžΆαž“αžŸαžΆαžšαŸˆαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαžšαž αžΌαžαž˜αž€αžŠαž›αŸ‹αžŸαž–αŸ’αžœαžαŸ’αž„αŸƒαž“αŸαŸ‡ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž˜αŸ‚αž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αž“αžΆαž…αž„αž…αžΆαŸ†αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž”αŸ‚αž”αž“αŸαŸ‡αž‘αŸ (αž¬αžŠαžΉαž„αžαžΆαžαžΎαž–αž½αž€αž‚αŸαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž…αžΆαž”αŸ‹αž”αžΆαž“αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αž“αŸƒαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž™αŸ‰αžΆαž„αž†αžΆαž”αŸ‹αžšαž αŸαžŸαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž‘αŸ)αŸ” αž”αž…αŸ’αž…αŸαž€αžœαž·αž‘αŸ’αž™αžΆαž˜αž½αž™αž”αŸ‚αž”αž“αŸαŸ‡αž‚αžΊ User Mode Linux αŸ” αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’αž“αŸƒαž”αŸ’αžšαž—αž–αžŠαžΎαž˜αž”αžΆαž“αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΈαž€αž€αž€αžΆαž™αž‡αžΆαž…αŸ’αžšαžΎαž“ αžŠαŸ„αž™αžšαž€αž˜αžΎαž›αžαžΆαžαžΎαž€αžΆαžšαžœαž·αžœαžŒαŸ’αžαž“αŸαž…αžΆαžŸαŸ‹αž˜αž½αž™αžŽαžΆαž“αŸ…αžαŸ‚αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž αžΎαž™αžŠαŸ‚αž›αž˜αž·αž“αž‘αžΆαž“αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž αžΎαž™αžŠαžΆαž€αŸ‹αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αžΌαžœαž’αŸ’αžœαžΈαž˜αž½αž™αžŠαžΌαž…αž‡αžΆαž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž‡αžΆαž‡αŸ†αž αžΆαž“ αŸ— αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αž’αŸ’αžœαžΎαž±αŸ’αž™αžαŸ’αž›αž½αž“αž’αŸ’αž“αž€αž€αŸ’αž›αžΆαž™αž‡αžΆ UML homebrew αž€αŸ’αž“αž»αž„ 2k19 αŸ” αž αžΎαž™αž”αžΆαž‘ αž™αžΎαž„αž”αžΆαž“αž’αž‰αŸ’αž‡αžΎαž‰αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’αž“αŸƒαž”αŸ’αžšαž€αžΆαžŸαžŠαžΎαž˜αž‘αŸ… Habr αžαŸαžŒαžΈαžŠαžΌαž…αŸ’αž“αŸαŸ‡αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž˜αžΆαž“αžŸαŸ†αžŽαž½αžš - αžŸαž½αžšαž‡αžΆαž—αžΆαžŸαžΆαž’αž„αŸ‹αž‚αŸ’αž›αŸαžŸαž“αŸ…αž€αŸ’αž“αž»αž„αž˜αžαž·αž™αŸ„αž”αž›αŸ‹αŸ”

αžšαž”αŸ€αž”αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ User Mode αž“αŸ…αž€αŸ’αž“αž»αž„αž›αžΈαž“αž»αž…

αžšαž”αŸ€αž”αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž›αžΈαž“αž»αž… αžαžΆαž˜αž–αž·αžαž‚αžΊαž‡αžΆαž…αŸ’αžšαž€αž“αŸƒαžαžΊαžŽαŸ‚αž›αž›αžΈαž“αž»αž…αž‘αŸ…αžαŸ’αž›αž½αž“αžœαžΆαž•αŸ’αž‘αžΆαž›αŸ‹αŸ” αžšαž”αŸ€αž”αž“αŸαŸ‡αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαžΊαžŽαŸ‚αž›αž›αžΈαž“αž»αž…αž–αŸαž‰αž›αŸαž‰αž‡αžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž αžΎαž™αž‡αžΆαž‘αžΌαž‘αŸ…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ„αž™αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŠαžΎαž˜αŸ’αž”αžΈαžŸαžΆαž€αž›αŸ’αž”αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αž‰αŸ’αž‡αžΆαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αžšαž”αŸ€αž”β€‹αž“αŸαŸ‡β€‹αž€αŸβ€‹αž˜αžΆαž“β€‹αž”αŸ’αžšαž™αŸ„αž‡αž“αŸβ€‹αž‡αžΆβ€‹αž§αž”αž€αžšαžŽαŸβ€‹αž―αž€αŸ„β€‹αž‘αžΌαž‘αŸ…β€‹αž•αž„αžŠαŸ‚αžš αžŠαŸ‚αž›β€‹αž‚αŸ„αž›αž€αžΆαžšαžŽαŸβ€‹αžŸαŸ’αžšαžŠαŸ€αž„β€‹αž“αžΉαž„β€‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšβ€‹αžšαž”αžŸαŸ‹β€‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“β€‹αž“αž·αž˜αŸ’αž˜αž·αžαŸ” αžšαž”αŸ€αž”αž“αŸαŸ‡αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž—αžΆαž–αž―αž€αŸ„αž…αŸ’αžšαžΎαž“αž‡αžΆαž„ Docker αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαž·αž…αž‡αžΆαž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαž–αŸαž‰αž›αŸαž‰αžŠαžΌαž…αž‡αžΆ KVM ឬ Virtual Box αŸ”

αž‡αžΆαž‘αžΌαž‘αŸ… User Mode αž’αžΆαž…αž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαž§αž”αž€αžšαžŽαŸαž…αž˜αŸ’αž›αŸ‚αž€ αž“αž·αž„αž–αž·αž”αžΆαž€αž”αŸ’αžšαžΎ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž“αŸ…αžαŸ‚αž˜αžΆαž“αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžšαž”αžŸαŸ‹αžœαžΆαŸ” αž™αŸ‰αžΆαž„αžŽαžΆαž˜αž·αž‰ αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžαžΊαžŽαŸ‚αž›αž›αžΈαž“αž»αž…αž–αŸαž‰αž›αŸαž‰αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΈαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αž‚αŸ’αž˜αžΆαž“αžŸαž·αž‘αŸ’αž’αž·αŸ” αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž“αŸαŸ‡αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž€αžΌαžŠαžŠαŸ‚αž›αž˜αž·αž“αž‚αž½αžšαž±αŸ’αž™αž‘αž»αž€αž…αž·αžαŸ’αžαž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαž‚αŸ†αžšαžΆαž˜αž€αŸ†αž αŸ‚αž„αžŠαž›αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ” αž αžΎαž™αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž“αŸαŸ‡αž‚αžΊαž‡αžΆαžαžΊαžŽαŸ‚αž›αž–αŸαž‰αž›αŸαž‰ αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžšαž”αžŸαŸ‹αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž–αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ αž“αŸ„αŸ‡αž‚αžΊ αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αžΉαž„αž˜αž·αž“αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰αžŠαŸ„αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž‘αŸαŸ”. αž“αŸαŸ‡αž˜αž·αž“αžŠαžΌαž…αž€αž»αž„αžαžΊαž“αŸαžš Docker αž’αž˜αŸ’αž˜αžαžΆαž‘αŸ αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžαŸ‚αž„αžαŸ‚αžƒαžΎαž‰αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αŸ” αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž”αŸ†αžŽαŸ‚αž€αž“αŸƒ pstree αž“αŸαŸ‡αž–αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž˜αž½αž™αŸ–

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}]

αž αžΎαž™αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αžœαžΆαž‘αŸ…αž“αžΉαž„ pstree αž“αŸƒαžαžΊαžŽαŸ‚αž›αž›αžΈαž“αž»αž…αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ–

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

αž“αŸ…αž–αŸαž›αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ Docker containers αžαŸ’αž‰αž»αŸ†αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰αž–αžΈ host αžˆαŸ’αž˜αŸ„αŸ‡αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž—αŸ’αž‰αŸ€αžœαŸ” αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžšαž”αŸ€αž”αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž›αžΈαž“αž»αž… αžœαžΆαž˜αž·αž“αž’αžΆαž…αž‘αŸ…αžšαž½αž…αž‘αŸαŸ” αžαžΎβ€‹αžœαžΆβ€‹αž˜αžΆαž“αž“αŸαž™β€‹αž™αŸ‰αžΆαž„β€‹αžŠαžΌαž…αž˜αŸ’αžαŸαž…? αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆαž§αž”αž€αžšαžŽαŸαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαžΆαž˜αžšαž™αŸˆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžšαž„αžŸαžœαž“αž€αž˜αŸ’αž˜αžšαž”αžŸαŸ‹αž›αžΈαž“αž»αž… αž˜αž·αž“αžƒαžΎαž‰ αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž—αŸ’αž‰αŸ€αžœαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžαŸ’αž›αŸ‡ αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž“αŸαŸ‡αž’αžΆαž…αž€αŸ’αž›αžΆαž™αž‡αžΆαžŠαžΆαžœαž˜αž»αžαž–αžΈαžšαŸ”

αž‡αžΆαž‘αžΌαž‘αŸ… αž”αŸ’αžšαž€αžΆαžŸαž‘αžΆαŸ†αž„αž˜αžΌαž›αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž‚αžΊαž‡αžΆαž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžŠαž»αŸ†αž“αŸƒαž€αžΆαžšαžŸαŸ’αžšαžΆαžœαž‡αŸ’αžšαžΆαžœ αž“αž·αž„αž€αžΆαžšαž–αŸ’αž™αžΆαž™αžΆαž˜αž™αŸ‰αžΆαž„αž›αŸ†αž”αžΆαž€αžŠαžΎαž˜αŸ’αž”αžΈαžŸαž˜αŸ’αžšαŸαž…αž”αžΆαž“αž›αž‘αŸ’αž’αž•αž›αžŠαŸ‚αž›αž…αž„αŸ‹αž”αžΆαž“αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αŸ’αž“αŸαŸ‡αž”αžΆαž“ αžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαž”αž»αžšαžΆαžŽαž•αŸ’αžŸαŸαž„αŸ— αž’αžΆαž“αž”αŸ’αžšαž—αž–αžαžΊαžŽαŸ‚αž› αž’αŸ’αžœαžΎαž€αžΆαžšαž€αŸ‚αž€αŸ†αž αž»αžŸαžŠαŸ‚αž›αž–αžΉαž„αž•αŸ’αž’αŸ‚αž€αžαŸ’αž›αžΆαŸ†αž„αž“αŸƒαž€αžΌαžŠαžŠαŸ‚αž›αžŸαžšαžŸαŸαžšαž€αŸ’αž“αž»αž„αžαŸ’αž„αŸƒαžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž“αŸ…αžšαŸ€αž“αž“αŸ…αž”αž‹αž˜αžŸαž·αž€αŸ’αžŸαžΆ αž αžΎαž™αžαŸ‚αž˜αž‘αžΆαŸ†αž„αž”αŸ’αžšαžΎ Heroku αž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžšαž–αž·αžŸαŸαžŸαžŠαžΎαž˜αŸ’αž”αžΈαžŸαŸ’αžœαŸ‚αž„αžšαž€αž§αž”αž€αžšαžŽαŸαžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΌαžœαž€αžΆαžšαŸ” . αž€αžΆαžšαž„αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αž“αžΆαŸ†αž±αŸ’αž™αž”αž»αžšαžŸαž“αŸ…αž›αžΎ IRC αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž αŸ…αžαŸ’αž‰αž»αŸ†αžαžΆαžœαŸαž‘αž˜αž“αŸ’αžαŸ” αžαŸ’αž‰αž»αŸ†αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαž€αžΆαžšαž”αž„αŸ’αž αŸ„αŸ‡αž“αŸαŸ‡αž”αž˜αŸ’αžšαžΎαž‡αžΆαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαžŸαžΆαž€αž›αŸ’αž”αž„αžšαžΏαž„αžŠαžΌαž…αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αžαžΊαžŽαŸ‚αž›αžαŸ’αž˜αžΈ αž“αž·αž„αž€αŸ†αžŽαŸ‚αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαŸ”

αž€αžΆαžšαž›αŸƒαžαž˜αŸ’αžšαžΌαžœ

αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αžšαž”αŸ€αž”αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž›αžΈαž“αž»αž…αž‚αžΊαž’αŸ’αžœαžΎαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž‡αŸ†αž αžΆαž“αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ–

  • αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“;
  • αž‘αžΆαž‰αž™αž€αžαžΊαžŽαŸ‚αž›αž›αžΈαž“αž»αž…;
  • αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαžΊαžŽαŸ‚αž›;
  • αž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αžαžΊαžŽαŸ‚αž›;
  • αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžš;
  • αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž―αž€αžŸαžΆαžšαž—αŸ’αž‰αŸ€αžœ;
  • αž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžαžΊαžŽαŸ‚αž›;
  • αž”αž„αŸ’αž€αžΎαžαž”αžŽαŸ’αžαžΆαž‰αž—αŸ’αž‰αŸ€αžœ;
  • αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžαžΊαžŽαŸ‚αž›αž—αŸ’αž‰αŸ€αžœαŸ”

αžαŸ’αž‰αž»αŸ†αžŸαž“αŸ’αž˜αžαŸ‹αžαžΆ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž’αŸ’αžœαžΎαžœαžΆαžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„ αž’αŸ’αž“αž€αž‘αŸ†αž“αž„αž‡αžΆαž“αžΉαž„αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžŠαŸ‚αž›αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’ Ubuntu ឬ Debian αž˜αž½αž™αž…αŸ†αž“αž½αž“αŸ” αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž–αŸ’αž™αžΆαž™αžΆαž˜αž’αž“αž»αžœαžαŸ’αžαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαžΆαž„αž›αžΎαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž…αžΌαž›αž…αž·αžαŸ’αž - Alpine αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‚αŸ’αž˜αžΆαž“αž’αŸ’αžœαžΈαž€αžΎαžαž‘αžΎαž„αž‘αŸ αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αžαžΊαžŽαŸ‚αž›αž›αžΈαž“αž»αž…αž˜αžΆαž“ glibc-isms αžŠαŸ‚αž›αž–αž·αž”αžΆαž€αž…αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž”αžΎαž€αž”αžšαž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ” αžαŸ’αž‰αž»αŸ†αž˜αžΆαž“αž‚αž˜αŸ’αžšαŸ„αž„αžšαžΆαž™αž€αžΆαžšαžŽαŸαžšαžΏαž„αž“αŸαŸ‡αž‘αŸ…αžαŸ’αž“αžΆαž€αŸ‹αž›αžΎ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž™αž›αŸ‹αž’αŸ†αž–αžΈαž”αž‰αŸ’αž αžΆαž“αŸαŸ‡αŸ”

αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“

αž’αŸŠαžΌαž”αŸŠαž»αž“αž‘αžΌ αž‘αžΆαž˜αž‘αžΆαžšαž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹αž€αž‰αŸ’αž…αž”αŸ‹αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαžαžΊαžŽαŸ‚αž›αž›αžΈαž“αž»αž… (αžŸαž“αŸ’αž˜αžαŸ‹αžαžΆαž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αžŸαŸ’αž’αžΆαž)αŸ–

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

αž’αŸ’αž“αž€αž’αžΆαž…αžŠαŸ†αž‘αžΎαž„αž–αž½αž€αžœαžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžαžΆαž„αž€αŸ’αžšαŸ„αž˜ (αž‡αžΆ root αž¬αž‡αžΆαž˜αž½αž™ sudo)αŸ–

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

αž…αŸ†αžŽαžΆαŸ†αžαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ†αž‘αžΎαž„αž˜αŸ‰αžΊαž“αž»αž™αžαžΊαžŽαŸ‚αž›αž›αžΈαž“αž»αž…αž“αžΉαž„αž‘αžΆαž˜αž‘αžΆαžšαž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ libncurses-dev. αžŸαžΌαž˜αž”αŸ’αžšαžΆαž€αžŠαžαžΆαžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžαžΆαž„αž€αŸ’αžšαŸ„αž˜ (αž‡αžΆ root αž¬αž‡αžΆαž˜αž½αž™ sudo)αŸ–

apt-get -y install libncurses-dev

αž€αžΆαžšαž‘αžΆαž‰αž™αž€αžαžΊαžŽαŸ‚αž›

αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‘αžΆαž‰αž™αž€ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž”αž„αŸ’αž€αžΎαžαžαžΊαžŽαŸ‚αž›αŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸαŸ‡ αž’αŸ’αž“αž€αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αŸ‚αž„αž…αŸ‚αž€αž‘αŸ†αž αŸ†αžαžΆαžŸαžšαžΉαž„αž”αŸ’αžšαž αŸ‚αž› 1,3 GB αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΆαž€αžŠαžαžΆαž’αŸ’αž“αž€αž˜αžΆαž“αžœαžΆαŸ”

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž‘αŸ… kernel.org αž“αž·αž„αž‘αž‘αž½αž›αž”αžΆαž“ URL αžŠαžΎαž˜αŸ’αž”αžΈαž‘αžΆαž‰αž™αž€αžαžΊαžŽαŸ‚αž›αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžαŸαžšαž—αžΆαž–αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αžαŸ” αž“αŸ…αž–αŸαž›αžŸαžšαžŸαŸαžšαž“αŸαŸ‡αž‚αžΊαŸ– https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.1.16.tar.xz

αž‘αžΆαž‰αž™αž€αž―αž€αžŸαžΆαžšαž“αŸαŸ‡αžŠαŸ„αž™αž”αŸ’αžšαžΎ 'wget':

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

αž αžΎαž™αžŸαŸ’αžšαž„αŸ‹αžœαžΆαž‡αžΆαž˜αž½αž™ 'tar':

tar xJf linux-5.1.16.tar.xz

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž™αžΎαž„αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αžαžαžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž“αŸ…αž–αŸαž›αž–αž“αŸ’αž›αžΆ tarball:

cd linux-5.1.16

αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αžαžΊαžŽαŸ‚αž›

αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αž„αŸ’αž€αžΎαžαžαžΊαžŽαŸ‚αž›αž‚αžΊαž‡αžΆαžŸαŸ†αžŽαž»αŸ† αž―αž€αžŸαžΆαžš с αž‡αžΆαž…αŸ’αžšαžΎαž“ αž§αž”αž€αžšαžŽαŸ αž“αž·αž„αžŸαŸ’αž‚αŸ’αžšαžΈαž”αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“ αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž€αž˜αŸ’αž˜αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αžŠαŸ†αž”αžΌαž„αž”αžΎαž€αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ†αž‘αžΎαž„αž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αŸ–

make ARCH=um menuconfig

αžœαžΆαž“αžΉαž„αž”αž„αŸ’αž€αžΎαž αž“αž·αž„αž”αž„αŸ’αž αžΆαž‰αž”αŸ’αžšαž’αž”αŸ‹αž˜αž½αž™αž•αŸ’αž“αŸ‚αž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αŸ” αž–αŸαž›αžŽαžΆβ€‹ '[Select]', αž’αŸ’αž“αž€αž“αžΉαž„αž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŠαŸ„αž™αž”αŸ’αžšαžΎαž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž… Space ឬ Enter αŸ” αžšαž»αž€αžšαž€αž”αž„αŸ’αž’αž½αž…αžŠαžΌαž…αž’αž˜αŸ’αž˜αžαžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αŸ’αžšαž½αž‰αž€αŸ’αžαžΆαžšαž…αž»αž… "αž‘αžΎαž„" αž“αž·αž„ "αž…αž»αŸ‡αž€αŸ’αžšαŸ„αž˜" αž αžΎαž™αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž’αžΆαžαž» - "αž†αŸ’αžœαŸαž„" ឬ "αžŸαŸ’αžαžΆαŸ†" αŸ”

αž‘αŸ’αžšαž“αž·αž…αž˜αžΎαž› --> αž˜αžΆαž“αž“αŸαž™αžαžΆαž’αŸ’αž“αž€αžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΊαž“αž»αž™αžšαž„ αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΌαž›αž”αŸ’αžšαžΎαžŠαŸ„αž™αž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž…αž”αž‰αŸ’αž…αžΌαž›αŸ” αž•αŸ’αž›αžΌαžœαž…αŸαž‰αž–αžΈαžœαžΆαž‚αžΊαž…αŸ’αž”αžΆαžŸαŸ‹αžαžΆαž˜αžšαž™αŸˆ '[Exit]'αŸ”

αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αž˜αŸ’αžšαžΎαžŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸ…αž€αŸ’αž“αž»αž„ '[Select]' αž αžΎαž™αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΆαž€αžŠαžαžΆαž–αž½αž€αž‚αŸαž˜αžΆαž“ '[*]' αž“αŸ…αž€αŸ’αž”αŸ‚αžšαž–αž½αž€αž‚αŸαŸ–

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

αž“αŸ„αŸ‡αž αžΎαž™αž‡αžΆαžœαžΆ αž’αŸ’αž“αž€αž’αžΆαž…αž…αŸαž‰αž–αžΈαž”αž„αŸ’αž’αž½αž…αž“αŸαŸ‡αžŠαŸ„αž™αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ '[Exit]' αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΆαž€αžŠαžαžΆαž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αž˜αŸ’αžšαž»αž‰αž±αŸ’αž™αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸ…αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž αžΎαž™αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ '[Yes]'αŸ”

αžαŸ’αž‰αž»αŸ†αžŽαŸ‚αž“αžΆαŸ†αž’αŸ’αž“αž€αž±αŸ’αž™αž›αŸαž„αž‡αžΆαž˜αž½αž™αž‡αž˜αŸ’αžšαžΎαžŸαž”αž„αŸ’αž€αžΎαžαžαžΊαžŽαŸ‚αž› αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž’αžΆαž“αž€αžΆαžšαž”αž„αŸ’αž αŸ„αŸ‡αž“αŸαŸ‡αŸ” αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž–αž·αžŸαŸ„αž’αž“αŸαž‘αžΆαŸ†αž„αž“αŸαŸ‡ αž’αŸ’αž“αž€αž’αžΆαž…αžšαŸ€αž“αž”αžΆαž“αž…αŸ’αžšαžΎαž“αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž’αŸ†αž–αžΈαž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αž˜αŸαž€αžΆαž“αž·αž€αžαžΊαžŽαŸ‚αž›αž€αž˜αŸ’αžšαž·αžαž‘αžΆαž” αž“αž·αž„αž•αž›αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αž“αŸƒαž‘αž„αŸ‹αž•αŸ’αžŸαŸαž„αŸ—αž›αžΎαž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αžšαž”αžŸαŸ‹αžœαžΆαŸ”

αž€αžΆαžšαž€αžŸαžΆαž„αžαžΊαžŽαŸ‚αž›αŸ”

αž›αžΈαž“αž»αž… αžαžΊαžŽαŸ‚αž› αž‚αžΊαž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸαž’αŸ†αž˜αž½αž™αžŠαŸ‚αž›αž’αŸ’αžœαžΎαžšαžΏαž„αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ” αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž˜αžΆαž“αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαž·αž…αžαž½αž…αž›αžΎαž•αŸ’αž“αŸ‚αž€αžšαžΉαž„αž…αžΆαžŸαŸ‹αž€αŸαžŠαŸ„αž™ αžœαžΆαž’αžΆαž…αž…αŸ†αžŽαžΆαž™αž–αŸαž›αž”αž“αŸ’αžαž·αž…αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαžΆαž„αžŸαž„αŸ‹αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž”αž„αŸ’αž€αžΎαžαžαžΊαžŽαŸ‚αž›αžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸˆ

make ARCH=um -j$(nproc)

αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΈ? αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž“αŸαŸ‡αž“αžΉαž„αž”αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαžαžšαž”αžŸαŸ‹αž™αžΎαž„αž±αŸ’αž™αž”αŸ’αžšαžΎαžŸαŸ’αž“αžΌαž›αžŸαŸŠαžΈαž—αžΈαž™αžΌ αž“αž·αž„αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αžŠαŸ‚αž›αž˜αžΆαž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αž„αŸ’αž€αžΎαž αž€αŸ’αžšαž»αž˜ $(nproc) αž“αŸ…αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒ Build αž‡αŸ†αž“αž½αžŸαž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ nprocαžŠαŸ‚αž›αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αž“αŸƒ coreutils αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš Ubuntu build αŸ”

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž–αŸαž›αžαŸ’αž›αŸ‡ αžαžΊαžŽαŸ‚αž›αžšαž”αžŸαŸ‹αž™αžΎαž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž„αž€αŸ’αžšαž„αž‡αžΆαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αžΆαž“αŸ” ./linux.

αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžš

αžŠαŸ„αž™αžŸαžΆαžšαžšαž”αŸ€αž”αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž›αžΈαž“αž»αž…αž”αž„αŸ’αž€αžΎαžαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžšαž’αž˜αŸ’αž˜αžαžΆ αž’αŸ’αž“αž€αž’αžΆαž…αžŠαŸ†αž‘αžΎαž„αžœαžΆαžŠαžΌαž…αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ‚αžšαŸ” αž“αŸαŸ‡αž‡αžΆαžšαž”αŸ€αž”αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž’αŸ’αžœαžΎαžœαžΆαŸ–

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

αžœαžΆαž€αŸαž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž’αŸ’αžœαžΎαž±αŸ’αž™αž”αŸ’αžšαžΆαž€αžŠαžαžΆ ~/bin αž‚αžΊαž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” $PATH:

export PATH=$PATH:$HOME/bin

αžšαŸ€αž”αž…αŸ†αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž―αž€αžŸαžΆαžšαž—αŸ’αž‰αŸ€αžœ

αž”αž„αŸ’αž€αžΎαžαžαžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž―αž€αžŸαžΆαžšαž—αŸ’αž‰αŸ€αžœαŸ–

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

αž”αžΎαž€ alpinelinux.org αž“αž·αž„αž…αžΌαž› αž•αŸ’αž“αŸ‚αž€αž‘αžΆαž‰αž™αž€ αžŸαŸ’αžœαŸ‚αž„αžšαž€αžαŸ†αžŽαž‘αžΆαž‰αž™αž€αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠ MINI ROOT FILESYSTEM. αž“αŸ…αž–αŸαž›αžŸαžšαžŸαŸαžšαž“αŸαŸ‡αž‚αžΊαŸ–

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

αž‘αžΆαž‰αž™αž€ tarball αž“αŸαŸ‡αžŠαŸ„αž™αž”αŸ’αžšαžΎ 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

αž₯αž‘αžΌαžœβ€‹αž”αž‰αŸ’αž…αžΌαž›β€‹αžαžβ€‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’β€‹αž―αž€αžŸαžΆαžšβ€‹αž—αŸ’αž‰αŸ€αžœβ€‹αž αžΎαž™β€‹αžŸαŸ’αžšαž„αŸ‹β€‹αž…αŸαž‰β€‹αž”αŸαžŽαŸ’αžŽαžŸαžΆαžšαŸ–

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

αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžŠαŸ‚αž›αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αžΉαž„αž”αž„αŸ’αž€αžΎαžαž‚αŸ†αžšαžΌαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž―αž€αžŸαžΆαžšαžαžΌαž…αž˜αž½αž™αŸ” αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž›αž€αŸ’αžαžŽαŸˆαž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’ αžœαžΆαž“αžΉαž„αž–αž·αž”αžΆαž€αžαŸ’αž›αžΆαŸ†αž„αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž€αž‰αŸ’αž…αž”αŸ‹αžαžΆαž˜αžšαž™αŸˆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ apk AlpineαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚ FS αž“αŸαŸ‡αž“αžΉαž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαžœαžΆαž™αžαž˜αŸ’αž›αŸƒαž‚αŸ†αž“αž·αžαž‘αžΌαž‘αŸ…αŸ”

αž™αžΎαž„αž€αŸαžαŸ’αžšαžΌαžœαž€αžΆαžšαž§αž”αž€αžšαžŽαŸαž•αž„αžŠαŸ‚αžšαŸ” αž’αžΈαž“αžΈ αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž”αŸ‹αžŸαŸ’αž€αžΆαžαŸ‹αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ† αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš zombie αžαžΊαžŽαŸ‚αž›αž—αŸ’αž‰αŸ€αžœαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

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

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžαžΊαžŽαŸ‚αž›αŸ”

αžαžΊαžŽαŸ‚αž›αž›αžΈαž“αž»αž… αžŠαžΌαž…αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž—αžΆαž‚αž…αŸ’αžšαžΎαž“αž˜αžΆαž“αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŠαŸ‚αž›αž’αžΆαž…αž…αžΌαž›αž”αŸ’αžšαžΎαž”αžΆαž“αžŠαŸ„αž™αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžŸαŸ„ --help.

αžαŸ’αž›αž½αž“αž‚αžΆαžαŸ‹ - αž‡αž½αž™

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.

αž”αž“αŸ’αž‘αŸ‡αž“αŸαŸ‡αžšαŸ†αž›αŸαž…αž“αžΌαžœαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž…αŸ†αž”αž„αž“αŸƒαž€αžΆαžšαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž…αžΌαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαžΊαžŽαŸ‚αž›αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαŸ†αžŽαž»αŸ†αž‡αž˜αŸ’αžšαžΎαžŸαž’αž”αŸ’αž”αž”αžšαž˜αžΆαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαŸ–

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

αž”αž“αŸ’αž‘αžΆαžαŸ‹αžαžΆαž„αž›αžΎαž”αŸ’αžšαžΆαž”αŸ‹αžαžΊαžŽαŸ‚αž›αžšαž”αžŸαŸ‹αž™αžΎαž„αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸˆ

  • αžŸαž“αŸ’αž˜αžαŸ‹αžαžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž―αž€αžŸαžΆαžš root αž‚αžΊαž‡αžΆαž§αž”αž€αžšαžŽαŸαž€αŸ’αž›αŸ‚αž„αž€αŸ’αž›αžΆαž™ /dev/root.
  • αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ hostfs αž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αž‰αŸ’αž‡αžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž―αž€αžŸαžΆαžš root αŸ”
  • αžŠαŸ†αž‘αžΎαž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž―αž€αžŸαžΆαžšαž—αŸ’αž‰αŸ€αžœαžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž“αŸ…αž›αžΎαž§αž”αž€αžšαžŽαŸαž«αžŸαŸ”
  • αž αžΎαž™αž”αžΆαž‘ αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž’αžΆαž“-αžŸαžšαžŸαŸαžšαŸ”
  • αž”αŸ’αžšαžΎαžαŸ‚ 64 MB αž“αŸƒ RAM (αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎαžαž·αž…αž‡αžΆαž„αž…αŸ’αžšαžΎαž“αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αž‚αŸ’αžšαŸ„αž„αž“αžΉαž„αž’αŸ’αžœαžΎ αž”αŸ‰αž»αž“αŸ’αžαŸ‚ 64 MB αž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαž…αŸ†αž“αž½αž“αžŠαŸαž›αŸ’αž’αž”αŸ’αžšαžŸαžΎαžš)αŸ”
  • αžαžΊαžŽαŸ‚αž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· /bin/sh αžšαž”αŸ€αž” init- αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ”

αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž“αŸαŸ‡ αž αžΎαž™αž’αŸ’αž“αž€αž‚αž½αžšαžαŸ‚αž‘αž‘αž½αž›αž”αžΆαž“αž’αŸ’αžœαžΈαž˜αž½αž™αžŠαžΌαž…αžαž‘αŸ…αŸ–

αž˜αž½αž™αžŸαž“αŸ’αž›αžΉαž€αž‘αŸ€αžαŸ”

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

αž§αž”αžΆαž™αž€αž›αžαžΆαž„αž›αžΎαž“αžΉαž„αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž™αžΎαž„ αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž—αŸ’αž‰αŸ€αžœαž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αžšαžΏαž„αžŠαžΌαž… /proc αž¬αžˆαŸ’αž˜αŸ„αŸ‡αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αžŸαžΆαž€αž›αŸ’αž”αž„αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

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

αžŠαžΎαž˜αŸ’αž”αžΈαž…αŸαž‰αž–αžΈαž—αŸ’αž‰αŸ€αžœ αžŸαžΌαž˜αžœαžΆαž™αž”αž‰αŸ’αž…αžΌαž› exit αž¬αž…αž»αž… control-d αŸ” αžœαžΆαž“αžΉαž„αžŸαž˜αŸ’αž›αžΆαž”αŸ‹αžŸαŸ‚αž› αž’αž˜αžŠαŸ„αž™αž€αžΆαžšαž—αŸαž™αžŸαŸ’αž›αž“αŸ‹αžŸαŸ’αž›αŸ„αžαžΊαžŽαŸ‚αž›αŸ–

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

αž™αžΎαž„αž˜αžΆαž“αž€αžΆαžšαž—αŸαž™αžŸαŸ’αž›αž“αŸ‹αžŸαŸ’αž›αŸ„αžαžΊαžŽαŸ‚αž›αž“αŸαŸ‡ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αžαžΊαžŽαŸ‚αž›αž›αžΈαž“αž»αž…αž‚αž·αžαžαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‚αžΊαžαŸ‚αž„αžαŸ‚αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž”αžΎαž‚αŸ’αž˜αžΆαž“αžœαžΆαž‘αŸ αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž˜αž·αž“αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž“αž·αž„αž‚αžΆαŸ†αž„αž”αžΆαž“αž‘αŸ€αžαž‘αŸαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αžŠαŸ„αž™αžŸαžΆαžšβ€‹αžœαžΆβ€‹αž‡αžΆβ€‹αžŠαŸ†αžŽαžΎαžšβ€‹αž€αžΆαžšβ€‹αžšαž”αŸ€αž”β€‹αž’αŸ’αž“αž€β€‹αž”αŸ’αžšαžΎ αž›αž‘αŸ’αž’αž•αž›β€‹αž›αž‘αŸ’αž’αž•αž›β€‹αž“αžΉαž„β€‹αž”αž‰αŸ’αž‡αžΌαž“β€‹αžαŸ’αž›αž½αž“β€‹αžœαžΆβ€‹αž‘αŸ… SIGABRTαžŠαŸ‚αž›αž“αžΆαŸ†αž’αŸ„αž™αž˜αžΆαž“αž›αž‘αŸ’αž’αž•αž›αŸ”

αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž”αžŽαŸ’αžαžΆαž‰αž—αŸ’αž‰αŸ€αžœ

αž αžΎαž™αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž’αŸ’αžœαžΈαŸ—αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžαž»αžŸαŸ” αž”αžŽαŸ’αžαžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž›αžΈαž“αž»αž…αž‚αžΊαž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž‚αŸ†αž“αž·αžαž‘αžΆαŸ†αž„αž˜αžΌαž›αž“αŸƒ "αžšαž”αŸ€αž”αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹" αž˜αžΆαž“αž€αŸ†αžŽαžαŸ‹αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαžΆαž…αŸ‹αž–αžΈαž‚αŸ’αž“αžΆαŸ” αž™αŸ‰αžΆαž„αžŽαžΆαž˜αž·αž‰αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž“αŸ…αž€αž˜αŸ’αžšαž·αžαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αžŽαŸ’αžαžΆαž‰αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹ αž―αž€αžŸαž·αž‘αŸ’αž’αž· αžšαž”αŸ€αž”αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‚αŸ’αž“αžΆ αž αŸαžαž»αž•αž›αžŠαŸ‚αž›αž’αžΆαž…αž™αž›αŸ‹αž”αžΆαž“αŸ”

αž…αŸ†αžŽαžΆαŸ†αŸ” per .: αž’αŸ’αž“αž€αž’αžΆαž…αž’αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαž‡αž˜αŸ’αžšαžΎαžŸαž•αŸ’αžŸαŸαž„αŸ—αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž”αžŽαŸ’αžαžΆαž‰αž€αŸ’αž“αž»αž„ UML αž“αŸ…αž‘αžΈαž“αŸαŸ‡.

αžŠαŸ†αžŽαžΎαžšαž‘αŸ…αž€αžΆαž“αŸ‹ Slirp

αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž˜αžΆαž“αž§αž”αž€αžšαžŽαŸαž”αž»αžšαžΆαžŽ αž“αž·αž„αžŸαŸ’αž‘αžΎαžšαžαŸ‚αž˜αž·αž“αž’αžΆαž…αž‚αžΆαŸ†αž‘αŸ’αžšαž”αžΆαž“αž αŸ…αžαžΆ αžšαž’αž·αž›αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžšαž”αŸ€αž”αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαžŽαžΆαžŠαŸ‚αž›αž›αžΈαž“αž»αž…αž’αžΆαž…αž’αŸ’αžœαžΎαž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αž‡αžΆαž˜αž½αž™αž”αžŽαŸ’αžαžΆαž‰αŸ” αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαžΌαž…αž‡αž„αŸ‹ TCP/IP αž€αž˜αŸ’αžšαž·αžαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž αžΎαž™αž˜αž·αž“αž‘αžΆαž˜αž‘αžΆαžšαž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŽαžΆαž˜αž½αž™αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αŸαŸ” αž§αž”αž€αžšαžŽαŸαž“αŸαŸ‡αž‚αžΊ αž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž€αŸ’αž“αž»αž„αž†αŸ’αž“αžΆαŸ† 1995αž αžΎαž™αž€αžΆαžšαž’αžΆαž”αŸ‹αžŠαŸαžαž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αžαž‚αžΊαž…αž»αŸ‡αž€αžΆαž›αž”αžšαž·αž…αŸ’αž†αŸαž‘ ៑៨០៣. Slirp αž‚αžΊαž…αžΆαžŸαŸ‹αžŽαžΆαžŸαŸ‹αŸ” αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αžŠαŸ‚αž›αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžš αž“αž·αž„αž€αžΆαžšαž’αžΆαž”αŸ‹αžŠαŸαž αž’αŸ’αž“αž€αž…αž„αž€αŸ’αžšαž„αž”αžΆαž“αž‘αŸ…αžšαž αžΌαžαž˜αž€αžŠαž›αŸ‹αž–αŸαž›αž“αŸαŸ‡ αžŠαŸ‚αž›αž₯αž‘αžΌαžœαž“αŸαŸ‡αž§αž”αž€αžšαžŽαŸαž“αŸαŸ‡αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαžαžΆαž‡αžΆ αž€αžΌαžŠαžšαž›αž½αž™.

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžŸαžΌαž˜αž‘αžΆαž‰αž™αž€ Slirp αž–αžΈαžƒαŸ’αž›αžΆαŸ†αž„ Ubuntu αž αžΎαž™αž–αŸ’αž™αžΆαž™αžΆαž˜αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžœαžΆαŸ–

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)

αž–αŸ’αžšαŸ‡αž’αžΎαž™αŸ” αžαŸ„αŸ‡αžŠαŸ†αž‘αžΎαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αŸ†αž”αžΆαžαŸ‹αž€αŸ†αž αž»αžŸαžšαž”αžŸαŸ‹ Slirp αž αžΎαž™αž˜αžΎαž›αžαžΆαžαžΎαž™αžΎαž„αž’αžΆαž…αžŠαžΉαž„αžαžΆαž˜αžΆαž“αž’αŸ’αžœαžΈαž€αžΎαžαž‘αžΎαž„αž“αŸ…αž‘αžΈαž“αŸαŸ‡αŸ–

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.

αž€αŸ†αž αž»αžŸαžœαžΆαž™αžŠαŸ†αž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ’αž›αž½αž“αž™αžΎαž„ αž”αž“αŸ’αž‘αžΆαžαŸ‹αž“αŸαŸ‡αŸ”. αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž› stacktrace αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž’αŸ’αžœαžΈαž˜αž½αž™αž“αžΉαž„αž‡αž½αž™αž™αžΎαž„αž“αŸ…αž‘αžΈαž“αŸ„αŸ‡αŸ–

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

αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž™αžΎαž„αžƒαžΎαž‰αžαžΆαž€αžΆαžšαž‚αžΆαŸ†αž„αž€αžΎαžαž‘αžΎαž„αž€αŸ†αž‘αž»αž„αž–αŸαž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ†αžŸαŸ†αžαžΆαž“αŸ‹ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž› slirp αž–αŸ’αž™αžΆαž™αžΆαž˜αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αžΆαžšαž’αžŸαŸ‹αž–αŸαž›αŸ” αž“αŸ…αž…αŸ†αžŽαž»αž…αž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΌαžœαžαŸ‚αž”αŸ„αŸ‡αž”αž„αŸ‹αž€αžΆαžšαž–αŸ’αž™αžΆαž™αžΆαž˜αž”αŸ†αž”αžΆαžαŸ‹αž€αŸ†αž αž»αžŸαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŸαžΌαž˜αž˜αžΎαž›αžαžΆαžαžΎ Slirp αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž–αžΈαž”αŸ’αžšαž—αŸαž‘αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ‚αžšαž¬αž‘αŸαŸ” αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž‘αžΆαž‰αž™αž€αž”αžŽαŸ’αžŽαžŸαžΆαžšαž‘αžΎαž„αžœαž·αž‰αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž–αžΈαž‚αŸαž αž‘αŸ†αž–αŸαžš αž”αŸ’αžšαž—αž–αž”αŸ’αžšαž—αž–αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αž€αžΆαžšαž’αžΌαžŸαž’αŸ’αžœαžΈαž˜αž½αž™αž–αžΈαž‘αžΈαž“αŸ„αŸ‡αžαžΆαž˜αž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž‚αžΊαž‡αžΆαž€αžΆαžšαžˆαžΊαž…αžΆαž”αŸ‹αŸ–

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

αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž™αžΎαž„αžƒαžΎαž‰αž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αž’αŸ†αž–αžΈαž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™αžŠαŸ‚αž›αž˜αž·αž“αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹ αž“αŸ„αŸ‡αž‚αžΊαž’αŸ†αž–αžΈαž’αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αž―αž€αžŸαžΆαžšαž‚αŸ„αž›αž–αžΈαžšαž›αž‘αŸ’αž’αž•αž›αŸ” αžœαžΆαž”αž„αŸ’αž αžΆαž‰αžαžΆαž“αŸ…αž…αž“αŸ’αž›αŸ„αŸ‡αž†αŸ’αž“αžΆαŸ† 2006 αžŠαž›αŸ‹αž…αŸ†αžŽαž»αž…αž“αŸαŸ‡ gcc αž”αžΆαž“αžˆαž”αŸ‹αž•αž›αž·αžαž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŠαŸ‚αž›αž”αŸ’αžšαžΎαž€αŸ’αž“αž»αž„αž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™αž“αŸƒαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž…αž„αž€αŸ’αžšαž„αž€αž˜αŸ’αžšαž·αžαž˜αž’αŸ’αž™αž˜αŸ” αžαŸ„αŸ‡αž–αŸ’αž™αžΆαž™αžΆαž˜αž‡αŸ†αž“αž½αžŸαž–αžΆαž€αŸ’αž™αž‚αž“αŸ’αž›αžΉαŸ‡ inline αž“αŸ…αž›αžΎαž˜αžαž·αž‘αž‘αŸ αž αžΎαž™αž˜αžΎαž›αž›αž‘αŸ’αž’αž•αž›αŸ–

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

αž‘αŸ αž“αŸαŸ‡αž€αŸαž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ‚αžšαŸ” αž“αŸ…αžαŸ‚αž˜αž·αž“αž’αžΆαž…αžšαž€αžƒαžΎαž‰αž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αž»αžαž„αžΆαžšαž‘αžΆαŸ†αž„αž“αŸαŸ‡αŸ”

αž“αŸ…αž…αŸ†αžŽαž»αž…αž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αŸ„αŸ‡αž”αž„αŸ‹ αž αžΎαž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž˜αžΎαž› Github αž€αž‰αŸ’αž…αž”αŸ‹αž”αž„αŸ’αž€αžΎαž Heroku. αž‘αŸ’αžšαžΉαžŸαŸ’αžαžΈαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž‚αžΊαžαžΆαž€αž‰αŸ’αž…αž”αŸ‹αž”αž„αŸ’αž€αžΎαž Heroku αž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αžΉαž„αž˜αžΆαž“αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžšαžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΌαžœαž€αžΆαžšαŸ” αž“αŸ…αž‘αžΈαž”αž‰αŸ’αž…αž”αŸ‹αž€αžΆαžšαžŸαŸ’αžœαŸ‚αž„αžšαž€αž”αžΆαž“αž“αžΆαŸ†αžαŸ’αž‰αž»αŸ† αž“αŸ…αž‘αžΈαž“αŸαŸ‡. αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž‘αžΆαž‰αž™αž€ αž“αž·αž„αž–αž“αŸ’αž›αžΆ uml.tar.gz αž αžΎαž™αž”αžΆαž“αžšαž€αžƒαžΎαž‰αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸˆ

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*

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžšαžšαž”αžŸαŸ‹ Slirp! αžαžΎαž‚αžΆαžαŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž‘αŸ?

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

αž˜αž·αž“αž‚αžΆαŸ†αž„ - αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžœαžΆαž‚αž½αžšαžαŸ‚αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš! αž…αžΌαžšαž™αžΎαž„αžŠαžΆαŸ†αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžšαž“αŸαŸ‡αŸ” ~/bin/slirp:

cp slirp ~/bin/slirp

αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαžαž€αž‰αŸ’αž…αž”αŸ‹αžŠαž€αžœαžΆαž…αŸαž‰ I αž”αžΆαž“αž’αŸ’αžœαžΎαž€αž‰αŸ’αž…αž€αŸ‹αž˜αž½αž™αŸ”.

αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž”αžŽαŸ’αžαžΆαž‰

αž₯αž‘αžΌαžœαž“αŸαŸ‡ αž…αžΌαžšαž™αžΎαž„αžšαŸ€αž”αž…αŸ†αž”αžŽαŸ’αžαžΆαž‰αž“αŸ…αž›αžΎαžαžΊαžŽαŸ‚αž›αž—αŸ’αž‰αŸ€αžœαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž‡αž˜αŸ’αžšαžΎαžŸαž“αŸƒαž€αžΆαžšαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš:

linux 
  root=/dev/root 
  rootfstype=hostfs 
  rootflags=$HOME/prefix/uml-demo 
  rw 
  mem=64M 
  eth0=slirp,,$HOME/bin/slirp 
  init=/bin/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

αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž–αžΈαžšαžŠαŸ†αž”αžΌαž„ /proc ΠΈ /sys αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž„αžΆαžš ifconfigαžŠαŸ‚αž›αž€αŸ†αžŽαžαŸ‹αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž”αžŽαŸ’αžαžΆαž‰αžŠαžΎαž˜αŸ’αž”αžΈαž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αž‡αžΆαž˜αž½αž™ Slirp αŸ” αž€αŸ’αžšαž»αž˜ route αž€αŸ†αžŽαžαŸ‹αžαžΆαžšαžΆαž„αž€αŸ†αžŽαžαŸ‹αž•αŸ’αž›αžΌαžœαžšαž”αžŸαŸ‹αžαžΊαžŽαŸ‚αž› αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αžαŸ†αž±αŸ’αž™αž…αžšαžΆαž…αžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΌαž“αžαžΆαž˜αžšαž™αŸˆαž•αŸ’αž›αžΌαžœαžšαžΌαž„αž€αŸ’αžšαŸ„αž˜αžŠαžΈ Slirp αŸ” αžαŸ„αŸ‡αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžœαžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαŸ†αžŽαž½αžš 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

Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚!

αž…αŸ†αžŽαžΆαŸ†αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ .: αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„ αž€αžΆαžšαž”αž„αŸ’αž αŸ„αŸ‡αžŠαžΎαž˜αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž“αŸ…αž›αžΎαž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαžŠαŸ‚αž›αž˜αžΆαž“αž€αžΆαžαž”αžŽαŸ’αžαžΆαž‰αžαŸ’αžŸαŸ‚ αž¬αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ‚αž›αž˜αž·αž“αžαŸ’αžšαžΌαžœαž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αž‰αŸ’αž‡αžΆαž”αž“αŸ’αžαŸ‚αž˜αŸ” αž“αŸ…αž›αžΎαž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž™αž½αžšαžŠαŸƒαžŠαŸ‚αž›αž˜αžΆαž“αž”αŸ’αžšαž–αŸαž“αŸ’αž’ WiFi 8265 αž–αžΈ Intel αž€αŸ†αž αž»αžŸαž€αžΎαžαž‘αžΎαž„αž“αŸ…αž–αŸαž›αžŠαŸ†αž‘αžΎαž„αž”αžŽαŸ’αžαžΆαž‰

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

αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„ αžαžΊαžŽαŸ‚αž›αž˜αž·αž“αž’αžΆαž…αž‘αžΆαž€αŸ‹αž‘αž„αž‡αžΆαž˜αž½αž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αž‰αŸ’αž‡αžΆαž€αžΆαžαž”αžŽαŸ’αžαžΆαž‰αž”αžΆαž“αž‘αŸαŸ” αž€αžΆαžšαž”αŸ‰αž»αž“αž”αŸ‰αž„αžŠαžΎαž˜αŸ’αž”αžΈαž…αž„αž€αŸ’αžšαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αž„αŸ’αž€αž”αŸ‹αž‘αŸ…αž€αŸ’αž“αž»αž„αžαžΊαžŽαŸ‚αž› αž‡αžΆαž’αž€αž»αžŸαž›αž˜αž·αž“αž”αžΆαž“αž‡αž½αžŸαž‡αž»αž›αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸ„αŸ‡αž‘αŸαŸ” αž“αŸ…αž–αŸαž›αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž•αŸ’αžŸαžΆαž™ αžœαžΆαž˜αž·αž“αž’αžΆαž…αžŸαŸ’αžœαŸ‚αž„αžšαž€αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸαŸ‡αž”αžΆαž“αž‘αŸαŸ” αž“αŸ…αž›αžΎαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŸαžΆαž˜αž‰αŸ’αž‰αž‡αžΆαž„ (αž§αž‘αžΆαž αžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„ Virtualbox) αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž€αžΎαž“αž‘αžΎαž„αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαŸ”

αžŸαžΌαž˜αž’αŸ’αžœαžΎαž€αžΆαžšαž”αŸ’αžαžΌαžšαž‘αž·αžŸαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŸαŸ‚αž›αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

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

αž αžΎαž™αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžαžΆαž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αžΆαž“αŸ–

chmod +x init.sh

αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž™αžΎαž„αž“αžΉαž„αž’αŸ’αžœαžΎαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ…αž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžαžΊαžŽαŸ‚αž›αŸ–

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

αž αžΎαž™αžŸαžΌαž˜αž“αž·αž™αžΆαž™αž‘αžΎαž„αžœαž·αž‰αŸ–

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

αž”αžŽαŸ’αžαžΆαž‰αž˜αžΆαž“αžŸαŸ’αžαŸαžšαž—αžΆαž–!

αž―αž€αžŸαžΆαžš docker

αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžΆαž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž€αŸ’αž“αž»αž„αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αŸ’αžšαž˜αžΌαž› DockerfileαžŠαŸ‚αž›αž’αŸ’αžœαžΎαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αžΌαžœαž‡αŸ†αž αžΆαž“αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆ αž αžΎαž™αž‚αž½αžšαžαŸ‚αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž’αŸ’αž“αž€αž“αžΌαžœαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž€αžΆαžšαž„αžΆαžšαŸ” αžαŸ’αž‰αž»αŸ†αž€αŸαž˜αžΆαž“αžŠαŸ‚αžšαŸ” αžαžΊαžŽαŸ‚αž›αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž‘αž»αž€αž‡αžΆαž˜αž»αž“αžŠαŸ‚αž›αž˜αžΆαž“αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž αŸ„αŸ‡αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž‡αžΆαž€αžΆαžšαžŸαŸ†αžαžΆαž“αŸ‹αžŽαžΆαžŸαŸ‹αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž™αž›αŸ‹αžαžΆαž“αŸ…αž‘αžΈαž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž‚αžΌαžŸαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžαŸ‚αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž’αž”αŸ’αž”αž”αžšαž˜αžΆαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”

αžαŸ’αž‰αž»αŸ†αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαž€αžΆαžšαž”αž„αŸ’αž αŸ„αŸ‡αž“αŸαŸ‡αž”αžΆαž“αž‡αž½αž™αž’αŸ’αž“αž€αž±αŸ’αž™αž™αž›αŸ‹αž–αžΈαžšαž”αŸ€αž”αž”αž„αŸ’αž€αžΎαž“αžαžΊαžŽαŸ‚αž›αž—αŸ’αž‰αŸ€αžœαŸ” αžœαžΆαž”αžΆαž“αž”αŸ’αžšαŸ‚αž€αŸ’αž›αžΆαž™αž‘αŸ…αž‡αžΆαž”αž·αžŸαžΆαž…αž˜αž½αž™αž…αŸ†αž“αž½αž“ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžšαž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž—αž•αŸ’αžŸαžΆαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž‡αžΆαž˜αž‚αŸ’αž‚αž»αž‘αŸ’αž‘αŸαžŸαž€αŸαžŠαŸαž‘αžΌαž›αŸ†αž‘αžΌαž›αžΆαž™αžŸαŸ’αžαžΈαž–αžΈαž€αžΆαžšαž€αžŸαžΆαž„ αžŠαŸ†αž‘αžΎαž„ αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ User Mode αž“αŸ…αž€αŸ’αž“αž»αž„αž›αžΈαž“αž»αž…αž€αŸ’αžšαŸ„αž˜αž€αŸ†αžŽαŸ‚αž‘αŸ†αž“αžΎαž”αž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸƒαž‚αŸ’αžšαž½αžŸαžΆαžšαž“αŸαŸ‡αŸ” αž‡αŸ†αž αžΆαž“αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‚αž½αžšαžαŸ‚αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ αž“αž·αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž—αŸ’αž‰αŸ€αžœαŸ” αžŠαŸ„αž™αžŸαžΆαžšαžšαžΌαž”αž—αžΆαž–αž€αž»αž„αžαžΊαž“αŸαžš Docker αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‡αžΆαž€αžΆαžšαž•αŸ’αžŸαž–αŸ’αžœαž•αŸ’αžŸαžΆαž™αž‡αžΆαžŸαžΆαž’αžΆαžšαžŽαŸˆ αž’αŸ’αž“αž€αž‚αž½αžšαžαŸ‚αž’αžΆαž…αž‘αžΆαž‰αž™αž€αžšαžΌαž”αž—αžΆαž–αžαžΆαž˜αžšαž™αŸˆ docker exportαž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž€αŸ†αžŽαžαŸ‹αž•αŸ’αž›αžΌαžœαžŠαŸ†αž‘αžΎαž„αžšαž”αžŸαŸ‹αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„ root αž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž―αž€αžŸαžΆαžšαžšαž”αžŸαŸ‹αžαžΊαžŽαŸ‚αž›αž—αŸ’αž‰αŸ€αžœαŸ” αž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαžŽαžΆαžŸαŸ‹, αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŸαŸ‚αž›αŸ”

αžŸαžΌαž˜αž’αžšαž‚αž»αžŽαž‡αžΆαž–αž·αžŸαŸαžŸαž…αŸ†αž–αŸ„αŸ‡ Rkeene αž–αžΈ #lobsters αž“αŸ…αž›αžΎ Freenode αŸ” αž”αžΎαž‚αŸ’αž˜αžΆαž“αž‡αŸ†αž“αž½αž™αžšαž”αžŸαŸ‹αž‚αžΆαžαŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ†αž”αžΆαžαŸ‹αž€αŸ†αž αž»αžŸ Slirp αž‘αŸ αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αž†αŸ’αž„αžΆαž™αž‘αŸαŸ” αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αžŠαžΉαž„αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž”αŸ’αžšαž–αŸαž“αŸ’αž’ Slackware αžšαž”αžŸαŸ‹αž‚αžΆαžαŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αžΆαž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž‡αžΆαž˜αž½αž™ slirp αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αŸ’αžšαž–αŸαž“αŸ’αž’ Ubuntu αž“αž·αž„ Alpine αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž‘αž‘αž½αž›αž™αž€ slirp αž αžΎαž™αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžš Rkeene αž”αžΆαž“αžŸαŸ’αž“αžΎαž˜αž€αžαŸ’αž‰αž»αŸ†αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž‰αž»αŸ† αžŠαŸ‚αž›αž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹αž’αŸ’αžœαžΈαž˜αž½αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž‰αž»αŸ†αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹