invalidopcode has quit [Remote host closed the connection]
invalidopcode has joined #osdev
<gog>
nice
<gog>
i'm eating mushroom paté
<kaichiuchi>
i hate mushrooms.
<mats2>
happy shwanza
<kaichiuchi>
i seriously don't believe it
<kaichiuchi>
I have no idea how people compile LLVM
<kaichiuchi>
ninja ended up getting killed
<theWeaver>
kaichiuchi: i think you have to use clang
<theWeaver>
or rustc
<kaichiuchi>
no I need a fucking EPYC system to do it apparently
<theWeaver>
_OOF_
<kaichiuchi>
(not literally)
<kaichiuchi>
but it ends up slowing the system to a crawl before something gets killed
<kaichiuchi>
and then it'll be fine, slow to a crawl
<kaichiuchi>
and then it'll kill something else
<kaichiuchi>
this time it just decided to commit suicide
<kaichiuchi>
I hate C++
<heat>
kaichiuchi, sup
<heat>
you should use clang and lld to compile
<heat>
it's a good chunk faster
<theWeaver>
heat: hey don't tell them what they should
<heat>
also don't forget to disable LTO
<heat>
and limit threads
<moon-child>
clang is fastest when compiled by clang, and gcc is fastest when compiled by gcc
<geist>
the main issue i've seen when compiling llvm is LTO... oh yeah heat just said that too
<geist>
the LTO link phases are *huge* and chew up tens of GB of ram
<heat>
ThinLTO is bearable
<heat>
LTO is bonkers
<heat>
if you're doing something else while compiling llvm, 1) limits threads or 2) don't
<heat>
s/limits/limit/
<\Test_User>
or 3) add 1TB swap
<geist>
yeah even that though means it might take like 15 hours. it can end up in a swap thrash
<heat>
also if you want any sort of LTO, limit concurrent link jobs (the specific cmake var is documented somewhere)
<geist>
one of the problems is their build system doesn't put links in a separate bucket, so if you compile with say -j8 or -j16 or whatnot it will happily try to link that many at a time
<heat>
yeah and that makes sense when you're not using LTO
<geist>
ninja does have a feature to create separate buckets, but it's i guess not wired up (last i checked)
<heat>
they *do* have a feature like that
<heat>
(they = LLVM)
<geist>
ah but it's something you have to know how to set in cmake?
<bslsk05>
github.com: toolchains/build_toolchain.sh at master · heatd/toolchains · GitHub
<heat>
yes
<geist>
ah good to know
<heat>
if you don't limit them in any capacity in LTO runs you'll probably bring any google server down to its knees :)
<kaichiuchi>
ok yes using clang definitely helped
<kaichiuchi>
(in truth, I thought clang was passed)
epony has joined #osdev
<heat>
llvm is a hard build but passing the right options certainly helps
<heat>
- someone that has built llvm too many times
<heat>
the really fucked up bits are build system changes, particularly when using the RUNTIMES features and all that
<heat>
ninja stops working properly so you need to rm -rf build/ and remake everything again
<heat>
it's NUTS
<kaichiuchi>
I do need to make a `make_toolchain.sh` thing like you have
<kaichiuchi>
well, I "want" to
<heat>
feel free to steal
<heat>
unless I relicense it GPLv3 and anti-tivoize your ass
<kaichiuchi>
shrug
<heat>
thou shalt make it possible to replace thine script
<heat>
some days ago I learned that apple never updated bash because that old ass version was the last GPLv2 version
Burgundy has quit [Ping timeout: 260 seconds]
<kaichiuchi>
I just want to be able to have something that I can either ship as a .zip like I do at work, or run a shell script
<heat>
my script doesnt zip or tar anything but it's trivial to tack that on at the end
<kaichiuchi>
indeed
<kaichiuchi>
for funsies I tried to compile LLVM with full LTO
<kaichiuchi>
as expected, a true disaster
PapaFrog has quit [Ping timeout: 265 seconds]
nanovad_ has joined #osdev
nanovad has quit [Ping timeout: 246 seconds]
nanovad_ is now known as nanovad
<zid>
USE="lto" emerge -DuNv @world you say?
<kaichiuchi>
i would never do that
<kaichiuchi>
not unless I actually had an EPYC or something
<kaichiuchi>
and by that I mean "a system that is well beyond anything I could want, or afford right now"
<zid>
more cpu doesn't really help, it's just a binary "do you have enough ram free?"
<zid>
if anything more cores makes it take longer becaue it's more likely to swap :P
<kaichiuchi>
i'm not even sure how much RAM it would take for full LTO to actually work on LLVM
<zid>
32GB should be about right
gog has quit [Quit: byee]
<kaichiuchi>
honestly, a part of me is tempted to splurge on a new PC even though I really don't need one
<zid>
I just upgraded mine
<kaichiuchi>
this will likely last another 6 years or so
<zid>
new cpu and expanded the rams
<zid>
Not bad for £50
<zid>
24GB of 800MHz -> 32GB of 933MHz, 4 cores -> 6 cores
<zid>
and more more nasty numa domains
<moon-child>
uma never got a song written about it
<zid>
horses have loads of songs
PapaFrog has joined #osdev
<kaichiuchi>
heat: by the way
<kaichiuchi>
for christmas I set up a friend of mine with a minecraft server running freebsd
<kaichiuchi>
what do you say to this
dutch has quit [Quit: WeeChat 3.7]
<zid>
at last we found something that runs on freebsd
<heat>
why is it not openbsd
<heat>
also yeah zid has a good point
<kaichiuchi>
it wasn't necessary
<heat>
you're sharing mjg's test system now?
<kaichiuchi>
it's a dumb minecraft server that will go away in 3 months because I'm not paying for it beyond that
<kaichiuchi>
hey i used freebsd for a long time
spikeheron has joined #osdev
invalidopcode has quit [Remote host closed the connection]
invalidopcode has joined #osdev
<epony>
and then you lost some hair and decided to implement your own linux
nanovad has quit [Quit: ZNC 1.7.5+deb4 - https://znc.in]
nanovad has joined #osdev
[itchychristmas] has quit [Ping timeout: 272 seconds]
elastic_dog has quit [Ping timeout: 265 seconds]
dude12312414 has joined #osdev
elastic_dog has joined #osdev
heat has quit [Ping timeout: 256 seconds]
invalidopcode has quit [Remote host closed the connection]
invalidopcode has joined #osdev
ZipCPU has quit [Ping timeout: 264 seconds]
jafarlihi has joined #osdev
<jafarlihi>
When mounting a filesystem, a `struct mount` is passed to vfsops vfs_mount_t function. │ ASHER
<jafarlihi>
│ | This struct contains `mnt_data` which is the private part of the filesystem. Each │ asmodai
<jafarlihi>
│ | filesystem has a different structure for `mnt_data`. Now my question is, how does this │ azenla
<jafarlihi>
│ | get populated? It is directly casted to specific FS structure as soon as it is in │ b3owulf
<jafarlihi>
│ | vfs_mount_t, which is the first function that runs when FS is │ bahamat
<jafarlihi>
│08:32:04 jafarlihi | mounted, so I'm not sure where this `mnt_data` is populated. Does mount utility do it
<jafarlihi>
oops, sorry, wrong paste
ZipCPU has joined #osdev
<jafarlihi>
Can someone please help me with FreeBSD? I'm trying to write a filesystem. When mounting a filesystem, a `struct mount` is passed to vfsops vfs_mount_t function. This struct contains `mnt_data` which is the private part of the filesystem. Each filesystem has a different structure for `mnt_data`. Now my question is, how does this get populated? It is directly casted to specific FS structure as soon
<jafarlihi>
as it is in vfs_mount_t, which is the first function that runs when FS is mounted, so I'm not sure where this `mnt_data` is populated. Does mount utility do it?
<jafarlihi>
correct paste
dude12312414 has quit [Quit: THE RAM IS TOO DAMN HIGH]
<kazinsal>
in ext2_vfsops.c it gets assigned at line 943 in `static int ext2_mountfs(struct vnode *devvp, struct mount *mp)`
poisone has joined #osdev
<zid>
kaichiuchi: my llvm failed to build
<zid>
1800 files in, didn't even give a useful error, just that column tracking had been supressed because the line was too long
<zid>
time for a swapon
GeDaMo has joined #osdev
jimbzy has quit [Ping timeout: 260 seconds]
Turn_Left has joined #osdev
Left_Turn has quit [Ping timeout: 264 seconds]
<jafarlihi>
kazinsal: That's exactly the issue, cast happens before the call the ext2_mountfs
<jafarlihi>
s/the/to/
<jafarlihi>
Isn't the vfs_mount_t the first function that runs?
<jafarlihi>
How does it cast mnt_data and operate on it before it is assigned?
<jafarlihi>
Oh, just noticed that happens only on MNT_UPDATE
<kazinsal>
"...thus, the student was enlightened"
<kazinsal>
I am not familiar with the freebsd source but when any unfamiliar source is involved or even a familiar one, I take the same approach to attempting to figure out how something works
<kazinsal>
search for something I know is relevant, then mentally backtrace how it connects from there
<kazinsal>
in the case of a large project like freebsd or linux there is a crossreference platform or six on the net that assists with that
<kazinsal>
lxr/fxr are godsends
<jafarlihi>
By the way, how useful do you find is ChatGPT for osdev?
<jafarlihi>
It just returns really old vfs_mount_t signature
<kazinsal>
never bothered. partially because AI + copyright = shitshow, but also because if I'm writing kernel code I want to actually be involved in whatever I'm writing
<kazinsal>
GPT is a markov chain powered by GPUs and cognitive bias
<kazinsal>
do not rely on it for anything of substance.
<bslsk05>
www.theregister.com: AI assistants help developers produce code that's insecure • The Register
<zid>
well duh?
<kazinsal>
as someone whose main programming outlet is in kernel space I would not ever trust an "AI" to do it right because 2022 AI is just 4chan posts funneled into a hackernews feed
<zid>
by AI they mean NN ML, and that's just tweaking polynomials until they tween a sparse dataset nicely
<kazinsal>
it is too stupid to be able to solve a problem in a fashion suitable for kernel space
<zid>
it's lossy compression where you fuzz the unpacker alg and pack it with the data
<kazinsal>
if an AI GPT jerkoff thing comes up with a solution to a problem that works 9999 times out of 10000 in user space it's fine
<kazinsal>
because in that 1 time out of 10000 the orchestration platform will just kill the offending process and restart it
<zid>
so like how an mpeg has fuck all visual data, and just re-creates it out of thin air by using carefully selected "this looks about right" info
<zid>
it's not going to go all CSI "zoom in!" and invent detail that was never there, at best, it recreates the input data correctly
<kazinsal>
AI programming is perfectly suited for docker kubernetes chef puppet bullshit
<zid>
It's great for automating repetitive tasks with slight but predictable variation
<jafarlihi>
It'll eat all the webdev jobs then 20% of those people will try to get into system programming and that's huge
<zid>
"What comes next, 1 , 2, ???" me: "4" AI NN: "THREE, TWEEN COMPLETE, GOT THAT POLYNOMIAL DOWN PAT"
xenos1984 has quit [Ping timeout: 260 seconds]
<GeDaMo>
"Why didn't you start at 0?" :P
<kazinsal>
people who are wee osdev babbies assume that webdev is some kind of thing you can do one handed on e621 and three quarters into the best pint of a bottle of jackie d
<kazinsal>
genuine webdev is actually kind of a nightmare because of the various modern web 2.1 frameworks that back everything and the half dozen languages that variously implement things
<kazinsal>
osdev and webdev are different skillsets with different mental frameworks and different requirements of how you approach things
<kazinsal>
they're both difficult but in different ways
<jafarlihi>
idk i do modern webdev and it is pretty easy compared to this shite
<zid>
I can't handle webdev
<zid>
It's dynamic and broken and nothing works and everything changes every day and it's all fashion
<kazinsal>
I have been at this long enough and I consider both of these two fields to be complex in their own ways
<jafarlihi>
Not really, but pretty stable going with React
<jafarlihi>
s/but/been
<zid>
Imagine if you had to rewrite your kernel using a nightly version of Go 0.0.1 then rust 2 weeks later, then swift
<zid>
and deal with all the "Well yea this just doesn't work yet/today" issues
<kazinsal>
it's kind of like the differences between playing electric guitar and bass guitar
<zid>
plus you know, it's all massively compounded by webdev stuff being "products"
<kazinsal>
I use this allegory because I've been playing electric guitar for 20+ years and am now learning bass
<kazinsal>
and also because I've been in the osdev space for 15 years and am passingly familiar with webdev
<jafarlihi>
idk webdev is pretty chill in 2022
<zid>
The actual coding is irrelevent, it's all business stuff, random features and workarounds, design changes, etc
<kazinsal>
a lot of the fundamentals are similar but the way they integrate into all their surroundings and how you need to apply your work to meet those requirements are quite different
<GeDaMo>
Job security! :P
<zid>
Realities of webdev as per my webdev friends' constant rants: "WHy is this an XML message where every field in the xml is a json document, and each json document ultimately just encodes a URI where you fetch the actual data from?"
<zid>
"Also \ is quadruple escaped"
<zid>
"and it takes my tool 14 minutes to parse it"
<jafarlihi>
Sounds like big corpo issues, we don't have that in a startup
<kazinsal>
startups exist to be purchased by big corpos
<kazinsal>
if you start a new company you are either doing it with the expectation that you are going to be bought out for 100x what you invested by someone else or because you are founding this with lottery winnings or the end result of your last successful startup
<jafarlihi>
Do you know if struct mount *mp is supposed to be zero-filled when passed to vfs_mount_t? Cuz iso9660 module directly casts it to mnt_data without first populating it then ANDs and checks the MNT_UPDATE flag
<kazinsal>
arguably a startup has a more precarious position because it needs to be able to make money out of nothing
<zid>
startups often have this issue worse than anyone, because none of their tech even exists
<zid>
hard to be mature when you're not even a thing
<jafarlihi>
I have seen such XML bs in big corpo, in startups it is all about clean engineering from what I've seen
<kazinsal>
I could classify my intent to be a cisco/juniper/extreme competitor as a startup but I do not have any of the prerequisites to do this, apart from the far distant fact where I know how data switching works at dozens of different levels
<jafarlihi>
I've got CCNP, hire me part time?
<kazinsal>
no, you've already failed the most important part of the interview
<jafarlihi>
which part that is?
<kazinsal>
arrogance
<jafarlihi>
its just IRDC
<jafarlihi>
IRC
<jafarlihi>
I'll work for free till we make it
<kazinsal>
another important part of tech spaces: assume someone who matters is watching
<kazinsal>
and a more proletariat importance: your time is valuable
* kof123
.oO( yes...yes, maxwell's demon is always watching...i'm afraid i can't let you do that )
ZombieChicken has quit [Remote host closed the connection]
poisone has quit [Ping timeout: 268 seconds]
wootehfoot has joined #osdev
Imk0tter has joined #osdev
terminalpusher has joined #osdev
poisone has joined #osdev
Imk0tter has quit [Remote host closed the connection]
ZipCPU_ has joined #osdev
ZipCPU has quit [Ping timeout: 248 seconds]
ZipCPU_ is now known as ZipCPU
jafarlihi has quit [Quit: WeeChat 3.6]
Burgundy has joined #osdev
ZipCPU has quit [Ping timeout: 272 seconds]
ZipCPU has joined #osdev
ZipCPU has quit [Ping timeout: 246 seconds]
ZipCPU has joined #osdev
ZipCPU has quit [Ping timeout: 252 seconds]
ZipCPU has joined #osdev
freemint has quit [Ping timeout: 265 seconds]
<Ermine>
Merry Christmas!
* merry
christmas
<Ermine>
:D
ZipCPU has quit [Ping timeout: 246 seconds]
jafarlihi has joined #osdev
<jafarlihi>
Hey. FreeBSD reads superblock of ext2 like this: bread(devvp, SBLOCK, SBSIZE, NOCRED, &bp). Now SBLOCK is defined as 2 and SBSIZE is defined as 1024. osdev wiki says ext2 superblock is always at byte offset 1024. Now I don't understand why SBLOCK is defined as 2, does this mean 2 * 512 (default block size?) = 1024?
ZipCPU has joined #osdev
epony has quit [Quit: QUIT]
ZipCPU has quit [Ping timeout: 265 seconds]
ZipCPU has joined #osdev
terminalpusher has quit [Remote host closed the connection]
terminalpusher has joined #osdev
<poisone>
erry kristmass
ZipCPU has quit [Ping timeout: 248 seconds]
ckie has quit [Quit: *poof*]
ZipCPU has joined #osdev
gog has joined #osdev
Turn_Left has quit [Ping timeout: 264 seconds]
ZipCPU has quit [Ping timeout: 260 seconds]
ZipCPU has joined #osdev
jafarlihi has quit [Quit: WeeChat 3.6]
epony has joined #osdev
epony has quit [Ping timeout: 268 seconds]
pie_ has quit []
vancz has quit []
<gog>
mewo
<Ermine>
gog: may I pet you?
<gog>
yes
* Ermine
pets gog
* gog
prrrr
<gog>
god Jul
vancz has joined #osdev
pie_ has joined #osdev
poisone has quit [Ping timeout: 268 seconds]
ALowther has joined #osdev
<ALowther>
Merry Christmas!!
<ALowther>
Does anybody have any recommended article(s)/video(s) for implementing a file system?
bauen1 has quit [Ping timeout: 268 seconds]
sham1 has quit [Quit: WeeChat 3.5]
Left_Turn has joined #osdev
epony has joined #osdev
sham1 has joined #osdev
sham1 has quit [Client Quit]
<kaichiuchi>
zid: mine failed to build for a different reason
<kaichiuchi>
"The dependency target "cxx" of target "check-runtimes" does not exist."
<kaichiuchi>
no idea what that means
ALowther has quit [Remote host closed the connection]
jimbzy has joined #osdev
sham1 has joined #osdev
<jimbzy>
Happy Sunday!
<epony>
infidel
<epony>
don't detonate yourself
<kaichiuchi>
huh
inegatives has joined #osdev
Matt|home has joined #osdev
<jimbzy>
I prefer to be called a heretic, but it's alright.
<inegatives>
The book says that there's a `block_run` structure with a `len` field, and `inode_addr` is basically a `block_run` structure with `len` field equal to 1. How do I represent/define this inode_addr type in C?
<Matt|home>
happy holidays <3
<jimbzy>
Cheers, Matt|home! XD
poisone has joined #osdev
<mats2>
happy shwanza
<jimbzy>
On this day we celebrate the birth of our savior, Rod Serling.
dude12312414 has joined #osdev
heat has joined #osdev
<heat>
on this day I celebrate the birth of our lord and saviour zid
<jimbzy>
All hail zid, all hail zid!
<kaichiuchi>
on this day I celebrate beastie and curse tux
<jimbzy>
Oh zid can you see, by the dawn's early light, what so proudly we hailed...
<kaichiuchi>
merry christmas to all
<kaichiuchi>
awesome, clang crashed
<kaichiuchi>
I've never seen clang crash until today
<heat>
reject christmas, reject celebration, reject people, always work #grindset
<inegatives>
you also have to give presents so it evens out
<inegatives>
buy your own shit with your own money
<heat>
you must be a really fun person
<inegatives>
i dont strive to be
<kaichiuchi>
i'm not really religious, but I still celebrate christmas
<kaichiuchi>
not for the religious aspect, but it's nice when people get together
<inegatives>
thats religion-enabler behavior
<kaichiuchi>
scrouge
<kaichiuchi>
er, scrooge*
<kaichiuchi>
i can respect people's beliefs
<inegatives>
they dont respect yours though
<inegatives>
infidel
<heat>
noooooooooooooooo dont respect people
<kaichiuchi>
what, you think everyone here in this channel is irreligious?
<inegatives>
better be
<inegatives>
otherwise what the hell are you even doing here lol
<kaichiuchi>
um
<heat>
developing operating systems
<inegatives>
go worship some fart of stone age men, why you need an os
<heat>
and going on bants with zid
<kaichiuchi>
i'm not even sure what's going on at this point
<kaichiuchi>
but okay
<kaichiuchi>
i will continue fucking with heat
<heat>
sortie, hammer time?
<heat>
kaichiuchi: dong
<kaichiuchi>
hey you wanna buy me a threadripper for christmas?
<heat>
no
<kaichiuchi>
why not
<kaichiuchi>
it's only $7000
<heat>
because you were going to buy me one
<kaichiuchi>
ah.
<kaichiuchi>
you caught me
<kaichiuchi>
I wonder how fast LLVM would've compiled with a threadripper and 128GB of RAM
<heat>
non-LTO? very
<heat>
some minutes
<heat>
4 or something? around that
<heat>
I remember we benched that with doug16k
<inegatives>
i have threadripper and it takes 12 minutes
<kaichiuchi>
i'm on a 3800X
<kaichiuchi>
unfortunately I'm still 18 years old at heart and want the latest and greatest shit all of the time no matter what the cost
<inegatives>
i used to download latest versions of adobe acrobat with 56kbps even though i didnt read single pdf, i just wanted the latest and greatest software
<kaichiuchi>
but there's no way I can spend $7k on a CPU
<kaichiuchi>
maybe if I was running gentoo
<kaichiuchi>
or something
<inegatives>
apple faglets spend 7k on 10% of threadripper performance
<kaichiuchi>
i have a macbook
<kaichiuchi>
what does that say about me
<inegatives>
that you dont have a good taste
* kaichiuchi
shrugs
<kaichiuchi>
it works for me
<theWeaver>
let's dispense with the homophobic slurs shall we
<kaichiuchi>
that too
<inegatives>
sorry
xenos1984 has quit [Read error: Connection reset by peer]
<kaichiuchi>
heat: what the fuck? you have to build libcxx?
<kaichiuchi>
actually I think the correct command is: cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/home/kaichiuchi/arfpgbe-clang-toolchain -DLLVM_ENABLE_PROJECTS="clang;lldb;lld;openmp;clang-tools-extra" -DLLVM_ENABLE_RUNTIMES="compiler-rt;libunwind" -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang ../llvm
<kaichiuchi>
i think you don't actually need libcxxabi
<kaichiuchi>
or even libunwind
<Ermine>
I don't even have Christmas today :D
<kaichiuchi>
yeah I think I should just include libunwind
xenos1984 has joined #osdev
wootehfoot has quit [Ping timeout: 264 seconds]
<heat>
kaichiuchi, you = who?
<heat>
me? yes. you? maybe? I don't know what you're doing
inegatives has left #osdev [#osdev]
<kaichiuchi>
the official answer I got was: "It is used as the low level unwinder implementation, primarily for C++ implementations using the Itanium ABI.
<kaichiuchi>
If you're not using a language making use of those exception handling capabilities, it's not required."
<kaichiuchi>
and that's not me
<heat>
I was talking about libcxx
<kaichiuchi>
oh
<kaichiuchi>
yeah I don't need it, it looks like LLVM's own flavor of the standard library
<kaichiuchi>
which I don't need
<heat>
sure
<heat>
you may need compiler-rt and libunwind though
<kaichiuchi>
compiler-rt yes
<kaichiuchi>
libunwind I'm not using exceptions at all
<kaichiuchi>
so I don't see why I'd need it
<heat>
you don't have a complete libgcc implementation without libunwind
<kaichiuchi>
oh.
<heat>
glibc for instance does use _Unwind functions for backtrace(3)
<kaichiuchi>
makes sense
xenos1984 has quit [Ping timeout: 248 seconds]
xenos1984 has joined #osdev
xenos1984 has quit [Ping timeout: 260 seconds]
dude12312414 has quit [Quit: THE RAM IS TOO DAMN HIGH]
xenos1984 has joined #osdev
Turn_Left has joined #osdev
Left_Turn has quit [Ping timeout: 265 seconds]
GeDaMo has quit [Quit: That's it, you people have stood in my way long enough! I'm going to clown college!]
invalidopcode has quit [Read error: Connection reset by peer]
invalidopcode has joined #osdev
<zid>
doesn't look like shark girl, hmm
scripted has joined #osdev
<scripted>
Hello!
<moon-child>
hmm? She's chomping the fishy
<scripted>
So I just implemented paging in my kernel, but it's causing a boot loop. So I opened up gdb and debugged the init_paging function, and the loop never starts, which probably is why its causing a boot loop. I have looked at the linker script but the variables KERNEL_START and KERNEL_END seem to be linked fine. Any ideas? https://github.com/ScriptedDeveloper/CrazeOS/blob/unstable/src/paging/paging.c
<bslsk05>
github.com: CrazeOS/paging.c at unstable · ScriptedDeveloper/CrazeOS · GitHub
<kaichiuchi>
hehe, boot loop
<heat>
scripted, qemu -d int
<zid>
-d int,nochain -S -s -no-shutdown -no-reboot for life