@__kvik Pointed out that even smaller executable sizes can be achieved by using Zig cc with musl. With what I have tested, sizes with Zig are 7.8K on the only-C version and 6.4K with the C & Asm mixed version. Command to build with Zig: "zig cc -Os -target x86_64-linux-musl -static sys.S shell.c", I'll update this comment if I get the size of the shell any lower (and also welcome to offer suggestions in the comments)
@NeonFXFusion15 сағат бұрын
@@nirlichtman how about luajit compiled with musl since it has support for direct bindings to C would seem fitting :D
@maowtm15 сағат бұрын
zig might be doing this already but I think link time optimization would probably help reduce size without having to go without libc? Alternatively with the assembly version, I wonder if you can get it to be smaller by using a non standard executable format (like a.out?), but I won't bother to check since setting up the tooling is quite a hassle
@terraria993414 сағат бұрын
would it be posible to boot directly into lua instead of into the shell?
@nono127114 сағат бұрын
Entirely pointless to use Zig for this. Zig is just using LLVM, which is a drop-in replacement for GCC in most cases, which you already use. You just don't pass the flags necessary to create an even smaller executable. Highly recommend reading Chris Wellons' blog, where he mostly focuses on Windows. The smallest possible Windows executable to print something without an import table and anything fancy beyond ASM entrypoint + normal C code for example is 1KB. You can get similar results on Linux as well.
@FreeScience13 сағат бұрын
@@terraria9934 Yeah, no reason why not. I guess loading a default script would be a bit trickier, but you could write a shell in lua and have it available by running require "shell"
@PerfectT4ste16 сағат бұрын
As someone who daily drives Linux From Scratch, I have to say this is one of the clearest and most to-the-point videos I've seen on low-level Linux concepts-beyond interesting.
@vaibhavmishra517910 сағат бұрын
@@PerfectT4ste 'Daily drives'? 🤯
@PhysicsGamer9 сағат бұрын
@@vaibhavmishra5179 LFS is a hugely fun project that takes shockingly little time to complete, considering what you get. I remember the first time I spun up Xorg I had to first reread the docs a few times since I had a hard time believing it was that straightforward. It's amazing how modular Linux is.
@craigmjackson9 сағат бұрын
@@vaibhavmishra5179I believe @PerfectT2ste, I've done daily driving LFS also, many times since about LFS 6. I make myself do it again every few years, then the novelty wears off and I go back to the normal stuff (i3 on arch). I learn an insane amount of new stuff each time, there's no better way to catch up on what's going on in this space. Your reaction is warranted, it's not for the faint of heart. Dependency hell is real. :)
@GeminiRay-hs2bh9 сағат бұрын
Bro compiles his OS himself! Take that arch users.
@alexander32936 сағат бұрын
What System do you have? On my system compiling chromium alone takes 9h.
@zettabitepragmara403117 сағат бұрын
I love the small little mistake at 20:30 It's always nice when small errors are kept like that because it shows no one is immune to making mistakes
@LucasHartmann10 сағат бұрын
Really cool. You can still remove debug symbols with strip for extra ~0.5kB on shell and ~100kB on lua.
@RedSntDK12 сағат бұрын
"For this we're going to write a little bit of assembly.." this is what taking the red pill must feels like, seeing how deep the rabbit hole goes.
@filip_sedlak23 сағат бұрын
This is fascinating. How about a minimum distro that will boot straight into DOOM.
@DimDima0923 сағат бұрын
Hm, how about making it as init process? Will it work?
@BlueEyedSexyPants21 сағат бұрын
@@filip_sedlak This not the same thing, but I used to run Doom 3 as my xinit process when I wanted to play because it would significantly improve the framerate over launching from Gnome.
@4fortyfour19 сағат бұрын
UEFI Doom?
@309electronics517 сағат бұрын
@@DimDima09 i made a small iso that boots doom made using busybox and also a version with buildroot. You can patch the init file to run fbdoom but in my Experience i cant run it as the main init process
@nick-leffler16 сағат бұрын
@@309electronics5 dude we need a GitHub link.
@silvunar17 сағат бұрын
This man explained his process better than any other kind of tutorial that I have ever seen, even though this was just created for fun
@inputoutput112620 сағат бұрын
let's get this man the highest retention so the algorithm pushes him to good places
@RGD2k6 сағат бұрын
Mad props for going right down to assembly and detailing really every step, and not glossing over minor mistakes either, but rather showing it as it is. I especially enjoyed it being mostly one-terminal with vim and tmux A suggestion: Please look into keypressOSD: I would love to see work done like this with a ticker-feed of actual keystrokes. No need to go slow if framestepping through the video is enough to figure out what the keyboard was getting, and I think that would add a lot to the pedagogal value of content like this.
@schweinekillerlp2245Күн бұрын
Really cool video. Very interesting to see the different steps and it helps you understand how the kernel is built and how the whole system works in general.
@veorEL6 сағат бұрын
Anyone else started their Sunday with coffee and this video ? No ? Just me ? You don't know what you're missing. 🎉
@comradepeter8712 сағат бұрын
Bro no way, just about a week back I was learning how to compile Linux kernel from scratch for RISC-V and now I see this vid. This vid is so nice as a minimal example for playing with a kernel. I learned a lot, thanks!
@VoyivodaFTW17 сағат бұрын
Did you get it working? Learning riscv is one of my goals.
@theitatit19 сағат бұрын
I hope no one gets inspired to release yet another distro that no one needs from this informative and educational video.
@toby999918 сағат бұрын
Yeah, It all seems totally pointless.
@ANT-jm4qx18 сағат бұрын
Mini Linux is coming out soon lol
@vilian918516 сағат бұрын
jukes on you i'm releasing bussinMiniOS
@VioletRM16 сағат бұрын
"wahh too many distros wahhh"
@krazymeanie16 сағат бұрын
Who tf cares if there's a million distro's to choose from? This is the lamest mindset in the Linux community ong.
@morezco13 сағат бұрын
You have a fantastic style of presentation, always showing the synopsis and allowing time to read before writing more code.
@eitantal72617 сағат бұрын
Makes me appreciate things like ATARI rom that have basic built-in, with some other OS utilities, in just a handful of KB, not MB
@vlc-cosplayer10 сағат бұрын
"in just a handful of KB, not MB" -- it's called BASIC for a reason ;3 Then again Fabrice Bellard (same madlad who created ffmpeg and JSLinux) also created QuickJS, which supports the ES2023 standard in ~210 KB of code, which is smaller than the Lua interpreter, a notoriously bare-bones language. 👀
@nostalgia50312 сағат бұрын
@@vlc-cosplayer not to mention Qemu!
@SreeTejaSimhaGemaraju6 сағат бұрын
Holy shit! This is the most effective linux build tutorials I've ever laid my eyes on! I needed this kind of starter tutorial to start playing around instead of elaborate detailing on all the bells and whistles of linux build tooling or some other thing! Thank you OP!
@omerguzel835110 сағат бұрын
The quality of your tutorial is insane. The thing is better than this is to show how documentations can be followed when you don't know.
@esra_erimez26 минут бұрын
The importance of this video simply cannot be overstated. Well done. You have earned a place in my bookmarks for technically significant videos.
@th34lch3m1st2 сағат бұрын
I would have to read many pages of manuals and search for days to find the same concepts you have exposed in this video. Instant subscription with all notifications. Thanks for sharing.
@evildragon1774Сағат бұрын
i just want to say, thank you, your channel is what makes me learning system calls. most of these are something that i never know and wouldn't taught in my local university.
@JohnMitchellCalif21 сағат бұрын
super interesting! I adored Linux from Scratch but couldn't get all the commands to work 100%. This is way simpler
@ThundzzСағат бұрын
I love your style of explaining and presenting things, it's extremely effective
@Chris-on5bt18 сағат бұрын
Great content! I have deployed some super minimal edge computers in a manufacturing setting to run single programs. (communications back to ERP) Don't have screen output, take in character input through a barcode scanner, play sounds for user feedback, and use the gpio pins to have some status lights. Used the lepotato platform, but could easily do it on a raspberry pi or any other SBC provided there is networking support. Deployments like this aren't my specialty, so I just used Debian stripped down to the basics and it works great. But now I can see another level deeper would be I could write a custom init process for my application and use a custom kernel. I would have to handle DHCP with init as well, but otherwise would be very direct. Application was developed in Rust (yea, I know crucify me), so already statically linked. Debian was nice for initial roll out for debugging in the field. I could ssh into the endpoints, read log files, upload code changes, etc. But now that the solution is in a stable state these functions are vestigial. Though the setup is a bit more involved, I could see the advantage of this being a resultant simpler execution environment and a stronger default security stance (less running means less attack surface). While my deployment scale doesn't call for this level of effort, none-the-less its a stimulating thought experiment in deployment engineering. Thanks for the great video!
@mipsters8 сағат бұрын
Was I under a rock? Why would you be crucified for Rust? I thought everybody loved it Also, the system you built sounds very cool
@Chris-on5bt7 сағат бұрын
@@mipsters A bit tongue in cheek, but there has been spicy controversy around Rust especially in the Linux Kernel developer world with attempts to integrate Rust into Kernel development. Mostly Rust gets pitted against C and a lot of the arguments thrown around are charactures or badly informed on both sides. There are some vocal people against Rust. You can lookup some videos from the recent Linux Plumbers conference if you are interested. Anywho, thanks for the boost. It was a fun project really helped with executing business operations. I have found Rust pretty great for application development. The compile time guarantees, static typing, concurrency model, and trait system in my experience are top notch.I built a couple hyper stable and fast applications quickly with it.
@michaelutech47867 сағат бұрын
This is one of the best tutorials I saw in a very long time. Thank you so much. This was really fun to watch!
@aaaidan8 сағат бұрын
Enthralling. I didn’t follow absolutely every step, but I never felt completely lost and learned a lot. Amazing journey, thank you.
@zach44619 сағат бұрын
"stop typing so loud" lol -the lovely people I work with
@DV-ml4fm18 сағат бұрын
Wow! This is great to learn. I thought tiny core linux at 10mb was the smallest.
@mouseroot80536 сағат бұрын
We didnt just get a video on tiny linux, we got a video on creating a shell, learning to mitigate the C stdlib AND how to build lua for said distro that you also build to iso....A fucking banger, well done.
@Toasterdemon12 сағат бұрын
This is great. The explanation makes it so much simpler than I thought it would be! This video has given me many ideas for potential single purpose images I could run to deploy little containerised apps. Super cool!
@alexengineering37546 сағат бұрын
This Video is great! I have never seen such a simple tutorial on kernal building. No overhead and straight to the point. Keep going! Minor note: you could change the flags in make from the command line without changing the Makefile but maybe you are right by not making it more complex.
@damouze2 сағат бұрын
This brings me back to my university days when I carried around a ZIP floppy with a very bare bones Slackware installation that I used in my classes. I used to call this my ZIPSlack disk. Funnily enough, a couple of years later there was an official minimalist Slackware distribution called ZIPSlack. I never used it though, as I was quite happy with my own installation.
@athenian201115 сағат бұрын
You are a genius man. Learning so much from your videos!
@fders93822 сағат бұрын
Interesting video, but i have three things to say. 1. For your minimal shell, I think it would be better to write the entire thing in assembler. You're already writing assembler to create C bindings for the syscalls. You also get more control over eliminating suboptimal instruction encodings and useless instructions. I reimplemented your shell in assembler and was able to get it down to 760 bytes, versus your 9.1KB. 2. If you're going to compile libc and link it statically with lua, what was the point of eliminating libc from your shell? You could just link dynamically across both binaries and save space through the shared code. I'd recommend Musl libc for a tiny libc. 3. If the only program you're able to run from your shell is the lua interpreter, why not just make that your init process? You could eliminate the shell entirely, then static linking of libc would make sense since it's the only program on the initramfs.
@maowtm15 сағат бұрын
dynamically linking shared libc probably a good idea although you then need to include ld.so as well, bur I guess it pays off if you need to add more programs
@amogusenjoyer13 сағат бұрын
I think it's to show the size of the minimal install without static linking libc, before adding it and Lua.
@XenHat7 сағат бұрын
I agree on most of this. This seems like a wasted opportunity to give Musl more exposure. I can't use it because I use many glibc-dependent programs, but in this case, it would be the superior choice. On the other hand, the issue with making regular programs the init process is that init needs to have the ability to reap dead processes. If, for some reason, the application-as-init ever ends up spawning subprocesses, I suspect the OS won't have a very long runtime.
@nicob.29615 сағат бұрын
Awesome video! Again, I learned a lot. Thank you for your work, Nir!
@anotherglitchinthematrix22 сағат бұрын
I am always fascinated by your content and leaving learning something new, thank you.
@nakfan4 сағат бұрын
This is fascinating stuff... My first visit. Immediately subscribed. BR, Per (Denmark)
@spfy16 сағат бұрын
Awesome video, it's always been hard figuring out how to do some of this stuff, but this explains everything pretty clearly. If you're ever in the mood, I have been struggling to find clear explanation how to boot something "bare-metal," with no kernel. Like using qemu to run a program that writes to the serial address of an esp32 to print something.
@anonymouscommentator19 сағат бұрын
woww this is an amazing video. really interesting to see how everything plays into each other!
@IunahYTСағат бұрын
this really gives Arch Linux and Gentoo a run for its money
@johanngambolputty535122 сағат бұрын
I love this. Is bash that big? Maybe just use lua with a run/exec command? Add a few drivers, some basic service support (a dir of shell scripts that run on startup?), busybox, something like mingetty for a basic login, a basic wayland window manager (to not worry about a separate x server) networkmanager and flatpak and then you should be able to run stuff like firefox and steam. That's like 5 core packages + kernel that you'd recompile when you want a system update, that would surely make for a fairly minimal but also fully featured distro to rival tinycore.
@tiffcz386314 сағат бұрын
Yes Bash is big compared to shells in Busybox. Flatpak is humongous in comparison to downloading shared objects from the right git repo to the right /lib directory, or taking configuration from your server's /etc to your system's /etc. Having a server system to compile the software any way you like is way more efficient, but would take effort.
@johanngambolputty53516 сағат бұрын
@@tiffcz3863 Yeah, I can see it defeating the point if size on disk was the one goal, but I'm kind of just looking at going from zero to fully featured in a minimum number of moving parts if that makes any sense.
@yoavgvili9 сағат бұрын
Excelolent explanation. Thank you for this, you made the description very clear,
@Michele56233 сағат бұрын
FANTASTIC, very interesting, simple and instructive ❤
@gearboxworks13 сағат бұрын
The entire time watching this, all I could think was "I am not worthy! 😢" Amazing stuff.
@dj.yacine18 сағат бұрын
Always high quality content
@muhammadmahad20 сағат бұрын
One of the best video and explanation related to distro :)
@cyberbiosecurity21 сағат бұрын
Wow, thank you! Very interesting and nicely filmed!
@EWARS_214 сағат бұрын
Best I've seen is ~2kb with GeckOS, although that's more another Unix-like targeting the 6502. IIRC, older Linux versions could handle as low as 4MB of RAM too. Maybe update the title as "Modern Linux" to avoid confusion! :D I kid, of course. Great vid, I'm saving for later.
@pantium9820 сағат бұрын
wow, really impressive stuff. Although most of the stuff on this video won't help me directly, I still learned so many things.
@oschonrock17 сағат бұрын
really nice... I have not done that on linux... done similar stuff on BSD, where it is much more common to compile your own kernel.
@PJutch4 сағат бұрын
I love stumbling on such nice vids
@jan_harald11 сағат бұрын
1) surprised you didn't start with adding some gcc flags to make it smaller, and jumped straight to assembly, like just add -Oz -ffunction-sections -fdata-sections -Wl,--gc-sections and maybe also -flto and you'll see it can get a LOT smaller 2) zig is irrelevant here, zig's using LLVM behind the scenes, so it's same as clang basically, all the magic is in using musl, you can use "mussel" project to easily make a gcc toolchain that uses musl (gcc also makes sliiiightly smaller binaries), there's also even smaller libc variants, but with those it gets farther and farther from "just write code" and more into "write code for this specific libc" there's a loot of fiddling that can be done for "smallest" stuff, including the fact you can use UPX to "pack" most elf executables smaller, with a tradeoff that you basically end up 2x the size of the binary, in ram (it has to unpack it and execute it, but the physical file is also in ram), which is neglegible in this case
@ANT-jm4qx22 сағат бұрын
Holy shit, I didn't know an ISO could be so small
@toby999918 сағат бұрын
Why not?
@hamdi-kadri56 минут бұрын
Really good video, and bro is playing with Linux and C and Assembly on Windows Terminal is fun to watch 😂
@ABCABC-sw8mh6 сағат бұрын
Finally new vid 🎉🎉🎉
@youssefsamir9119Күн бұрын
I didn’t even watch the video yet, but I’m saying it’s one of the best ever made!
@countingsheep548314 сағат бұрын
Using windows wsl to write a linux distro in vim is crazy work. My kinda crazy.
@TuxikCE23 сағат бұрын
You don't need initramfs support if all your modules are built into the kernel.
@nirlichtman23 сағат бұрын
initramfs support is required since I use it to load up the init cpio which holds the userspace. it is true that initramfs is useful for dynamically loading drivers before the main root fs is loaded from disk, but here I use it for the whole system (and there is no root fs that comes from disk)
@TrustJesusToday14 сағат бұрын
Watching this makes me long for bloated distros. Fun video!
@maloycastillo3473Күн бұрын
Great information, great work!
@mohamedbelafdal636214 сағат бұрын
I feel like most of the video is about writing a minimalist shell in asm from scratch... still entertaining to watch
@JamesAwokeKnowing12 сағат бұрын
because obviously kernel is given so need shell and lang.
@vaclav_mach18 сағат бұрын
That’s great! Especially for embedded HW with limited resources/running a single task. I need to dust off the Milk-V Duo board for this… (not x64, but at least some challenge in figuring out the assembly)
@robbieconnor99927 сағат бұрын
This was a great watch!!
@UncleBroer5 сағат бұрын
This is sooooo cool. I just have to give it a try.
@yesitsmaxwell8 сағат бұрын
The fact that this could fit on a floppy is amazing
@JensAndree5 сағат бұрын
Nothing compared to the old QNX 1.44 MB floppy demo back in the days... ;) Check that out for some impressive squeezing a tiny kernel - and X + apps, onto a bootable floppy! Heavily compressed of course, but it worked. Just a shame the guy who made it passed away if I remember things correctly? Back in the days we could compile into tiny binaries but modern bloat is terrible at optimising for size due to near infinite RAM and disk... I'm an old asm guy who used to code for telco RTOS hardware and we counted clockcycles in order to get things to fit and run on the limited hardware we had. It was very fast but expensive code, hence why hardware replaced software efficiency...
@245trichlorophenateСағат бұрын
When even bash is considered bloat
@fusca14tube23 сағат бұрын
Wow!!! Your videos are the best!!! Awesome!!!! By the way, you could use strip utility to get a smaller lua executable. Thank you and keep making this kind of work!!!!
@nirlichtman21 сағат бұрын
thanks, good point!
@Alex-kj9rc10 сағат бұрын
Thank you for sharing your genius! Amazing video! Bravo!
@AuroraMalinowska2 сағат бұрын
i love you and your videos. absolutely brillllliant
@atabac11 сағат бұрын
can you cross compile to arm microcontrollers? or riscv?
@Lastaii5 сағат бұрын
Amazing, this guy is the Ben Eater of Linux 👍
@ggorg02 сағат бұрын
why don't you throw BusyBox on there?
@amorsmor85289 сағат бұрын
Thanks for that amazing video ❤
@n-uv7vg21 сағат бұрын
What a legend he didnt make a linux distro bro this is a whole os that is just based on the linux kernel and its from scratch
@309electronics517 сағат бұрын
And its small too! Minimal bloat
@DimDima09Күн бұрын
Damn looks cool. Thank you!
@amogusenjoyer14 сағат бұрын
Okay, ignorant question here but: doesnt the kernel have a minimal libc nowadays? Could you link against that, or is it just not usable for something like this?
@oolong47008 сағат бұрын
I learned a lot. Thank you.
@m4rt_14 сағат бұрын
You can do this: gcc -o shell shell.c sys.S --entry main -z noexecstack -static (gcc can compile C, and GNU Assembly, and then link it together.) you can also use -Os to optimize for size. Also, to remove all libc, you can use the -nostdlib argument You can also remove unnecessary information using the strip command. Also, here is an implementation of your basic shell in only 435 bytes (I wrote it in fasm as I am more familiar with that one.) format ELF64 executable ; I/O STDOUT = 1 STDIN = 0 ; Wait P_ALL = 0 WEXITED = 4 ; Syscalls SYS_read = 0 SYS_write = 1 SYS_fork = 57 SYS_execve = 59 SYS_exit = 60 SYS_waitid = 247 ; Syscall helpers macro syscall0 number { mov rax, number syscall } macro syscall1 number, arg1 { mov rax, number mov rdi, arg1 syscall } macro syscall3 number, arg1, arg2, arg3 { mov rax, number mov rdi, arg1 mov rsi, arg2 mov rdx, arg3 syscall } macro syscall5 number, arg1, arg2, arg3, arg4, arg5 { mov rax, number mov rdi, arg1 mov rsi, arg2 mov rdx, arg3 mov r10, arg4 mov r8, arg5 syscall } segment readable executable entry main main: ; Write the "# " thing syscall3 SYS_write, STDOUT, write_text, 2 cmp rax, 0 jl .write_error ; Get the command syscall3 SYS_read, STDIN, command, 255 cmp rax, 0 je .read_error ; Replace the newline add rax, command sub rax, 1 mov byte [rax], 0 ; Fork it syscall0 SYS_fork cmp rax, 0 je .execute ; Wait for it to finish syscall5 SYS_waitid, P_ALL, 0, siginfo, WEXITED, 0 jmp main .execute: ; Run the command syscall3 SYS_execve, command, 0, 0 cmp rax, 0 jl .execve_error syscall1 SYS_exit, 0 .write_error: syscall1 SYS_exit, 1 .read_error: syscall1 SYS_exit, 2 .execve_error: syscall1 SYS_exit, 3 segment readable writable write_text: db "# " ; don't care about the content, but it's 128 bytes siginfo: rb 128 command: rb 255
@mossaiby12 сағат бұрын
I did this; guess the final size with -Os! 767KB!
@JPs-q1o11 сағат бұрын
It's too bad gcc doesn't have a "-minimal" flag or similar to complement the -static flag which would build using only using the necessary functions and symbols as opposed to embedding the included libraries whole.
@JoeBurnett17 сағат бұрын
This was SO good!
@ronp610813 сағат бұрын
Great info thanks for sharing
@velho629816 сағат бұрын
Somehow i wouldn't have expected you running Windows ...
@JamesAwokeKnowing12 сағат бұрын
he's probably trying to make linux apps as .exe by making each it's own WSL distro
@rickyoswald14 сағат бұрын
Very interesting video, but there seems to be an error. I've tried on Debian and Arch and both segfault at main() in the 2nd shell created around 20:30. I've downloaded the code directly from your git repo. Turning on -Wall there is a warning that argument 2 of execve should not be null, as specified in unistd.h. Tested with GCC 14.2.1 on Arch, 13.3.0 on Debian. I'm not sure if this is the source of the error.
@rickyoswald14 сағат бұрын
It works perfectly with the zig command in the pinned comment.
@Muttisuri17 сағат бұрын
Question wouldn't using compiler options like -Os on both the kernel and shell/init files result in smaller binary files?
@rz237416 сағат бұрын
Why do you need an initramfs/initrd? Wouldn't it be simpler and smaller to put init and lua directly on the ISO?
@eitantal72617 сағат бұрын
Makes me appreciate how small is a dos boot disk. 90KB or so, if I remember correctly
@l4ppland6 сағат бұрын
Thanks a lot, nice video
@JohnneyleeRollins17 сағат бұрын
you did your kernel compiling inside wsl thats pretty cool, was it ws1 or ws2?
@nirlichtman17 сағат бұрын
WSL2
@stevefan82836 сағат бұрын
11:37 or just use musl and call it a day?
@JoeBurnett17 сағат бұрын
Do you have any interest in doing things like this for ARM64, especially some of the corresponding projects listed in your GitHub hello page?
@davidDN231816 сағат бұрын
Next create minimal text file creator and include luac to be able to improve the distro from the distro itself
@VSteam8113 сағат бұрын
this almost makes me want to try and learn C
@ElbahethAmrSrour22 сағат бұрын
when i try to install any linux distro it give me Kernal Panic similer to the error that you got in this Video can you Helo me With This
@CodeWizard10Сағат бұрын
How much compiling will take with basic WSL2 configuration? (8GB ram 4 cores) and i use acer nitro 5
@wahidislamlinad18 сағат бұрын
i was waiting for thiss
@terraria993414 сағат бұрын
i was expecting a busybox based thing not an entirely custom shell
@mossaiby12 сағат бұрын
He already has such a video: kzbin.info/www/bejne/h53doJidiNp8sMk