Pebble 1.0 BETA - simple bootsplash program

Stuff that has yet to be sorted into a category.
Message
Author
User avatar
Pizzasgood
Posts: 6183
Joined: Wed 04 May 2005, 20:28
Location: Knoxville, TN, USA

Pebble 1.0 BETA - simple bootsplash program

#1 Post by Pizzasgood »

Changes since 0.95:
* now notices when there is no framebuffer and disables itself
* now works with 2.14 and 2.14R
* now statically compiled
* dropped support for all file types but .jpg (cuts size down a bit)
* implementation on full-hd installs is simplified

Pebble 1.0 - BETA!

Pebble is a very basic boot splash system. It can be disabled with the boot option pfix=nosplash, but there isn't a hot-key to disable it while it's actually booting. Pebble does log the output that is being hidden, and stores it at /tmp/boot-text.log (ignore the ending line about shutting down "worm", that's a harmless glitch (worm is the daemon I wrote that does the input logging)). It does not have internal support for progress bars, but they can be implemented by using staged animation (Make stage_1 an image of a 0% bar, stage_2 and image of a 20% bar, etc., then just incriment the stage at key points. Not ideal, but it works.) One more thing not supported is split screen. Also, you might be wondering about a shutdown screen. I don't have the time to fully add that, but I did include basic support that someone could use to create a shutdown screen from. I'll explain that later.

Those non-supported things I mentioned are on my long-term to-do list, but will not happen in the near future. Don't bug me about them unless you can give me strong motivation, on the order of a year's supply of free Candy Corn, no questions asked. Otherwise, I have more important things to deal with (like paying for college, or sleeping once in a while).

Installing Pebble:
Installing Pebble involves modifying your initrd.gz file. Because of this, I can't just provide a dotpup. What I can do is provide pre-set initrd.gz files for a couple versions of Puppy, and hopefully enough documentation and examples for you to modify things yourself for other versions (I did try to make it as simple as possible when writing Pebble though, because I know the installation can be a pain. And I have to install it over and over for testing purposes!).

For this guide, I will assume you're running Puppy 3.01. I'll also provide packages for 4.00, 3.00, 2.14, and 2.14R 1.0.1, and these instructions will work for those too (just change 3.01 to 3.00 or whatever in any directions I give). For other versions of Puppy, read this anyways to get an idea, then read the section afterwards for technical details. But be warned: you'll probably need to compile the kernel modules and modify the boot scripts yourself.

Okay, first things first. Download pebble_p301-0.95.tar.gz from the bottom of this post. Extract it somewhere (clicking it should bring up a gui, but I prefer just opening a terminal and running tar -xf pebble_p301-1.0.tar.gz). It should spit out two things: a new initrd.gz file, and a petget titled "pebble_postinit-1.0.pet". We'll start with the easy part: Click pebble_postinit-1.0.pet to install it. That will install several things you'll need, including slight tweaks to some system scripts.
WARNING: This will modify /etc/rc.d/rc.country, rc.country-PUP217, rc.local0, and rc.sysinit. If you have any custom changes to those files, back them up and manually apply those changes to the new versions (or the reverse, whichever you prefer). Tkdiff is very handy for this purpose ;)

Okay, next you need to install the new initrd.gz and alter your boot commands. This part is going to be different for each person, though I'll try to cover as many situations as I can. I'll devote a section for each situation, but first I need to explain something common to all: the frame buffer. Specifically, how to set it. It uses the boot option vga=### where ### is either a number or normal. normal is what it defaults to when you don't use this option. Otherwise, it will be the mode that corresponds with the number. Different modes have different color depths and resoultions. For this guide, I will use 785, which is 640x480x64k. You're free to use whatever you want, but keep in mind that Pebble does not scale images yet, so make sure you set it appropriately for the theme you use (using too big a resolution won't hurt, the boot image will just be centered in the middle, surrounded by black). The default theme included with Pebble uses 640x480. The monkey theme is 800x600 (vesa=788). Also something to note: whatever you set will also apply to Puppy's CLI. It won't affect Xwindows, but when you drop out to the commandline, you'll have whatever resolution you use here.

Code: Select all

no framebuffer:  vga = normal 
1024x768x64k:  vga=791
1024x768x32k:  vga=790
1024x768x256:  vga=773
800x600x64k:  vga=788
800x600x32k:  vga=787
800x600x256:  vga=771
640x480x64k:  vga=785
640x480x32k:  vga=784
640x480x256:  vga=769
If you need any other modes, a quick web search can probably turn them up.


Now that that's out of the way, on with the installation.

LiveCD
If you use Puppy as a LiveCD, you will need to edit the Puppy iso to add the new initrd.gz file. Isomaster is a program that can do this, which is included with Puppy. Just use it to delete the old one, then plop in the new on I provided.

You also need to modify the isolinux.cfg file that is within the iso. Probably, you'll have to do that by extracting it from the iso, editing it, then putting it back in. Find the line that looks like this:

Code: Select all

append initrd=initrd.gz pmedia=cd
Change it to look like this:

Code: Select all

append initrd=initrd.gz pmedia=cd vga=785
(Don't change it to look exactly like that, just add the vga=785 part. The rest of the line will vary from machine to machine)

Okay, that should do it. At this point you should have a new iso file. If all went well, you should be able to just burn that to a disk and boot. If not, let me know exactly what you did, and post a copy of your isolinux.cfg (please put it within the

Code: Select all

 [/code ] tags, it's easier to read that way).



[u]Multisession[/u]
My sincere apologies, but I don't know how to do it with this yet.  I think you might be able to follow the directions above for LiveCD to create a new disk with the boot splash (burnt open for multisession), then remove your normal disk from the drive, insert the new disk, and just let Puppy save to that like it was the original.  I suspect that will work, but I'm not certain.  One of these days I'll have to test it, unless somebody can confirm that this works.



[u]Frugal/Full HD[/u]
I'm going to assume you use Grub.  If you use Lilo, add the vga=785 option to the append line of lilo.conf, and make sure you run lilo after you finish everything.
Okay, first you need to add the new initrd.gz file (skip this if you have a Full HD install).  Where you put it depends on how you're system is set up.  In my case, I have initrd.gz at /mnt/home/boot/puppy301/initrd.gz.  You should know where it is on your computer, otherwise use [b]find / -name initrd.gz[/b] to find all initrd.gz files on your system, and determine which one to replace.  Once you have it located, just delete or rename it, then drop in the new version.

Second step:  Dig up your menu.lst file, which for me is at /mnt/home/boot/grub/menu.lst.  Find the line that looks like this: [code]kernel /boot/puppy301/vmlinuz PMEDIA=satahd
Change it to look like this:

Code: Select all

kernel /boot/puppy301/vmlinuz PMEDIA=satahd vga=785
(Don't change it to look exactly like that, just add the vga=785 part. The rest of the line will vary from machine to machine, and from full-hd to frugal-hd installs)

Now it should be finished. If all goes well, a reboot will start you up with a nice refreshing splash instead of text. If not, let me know exactly what you did, and post a copy of your menu.lst (please put it within the

Code: Select all

 [/code ] tags, it's easier to read that way).



[u]USB[/u]
Okay, first you need to add the new initrd.gz file.  Mount your USB drive.  The old initrd.gz file should be right there.  Just back it up somewhere and drop in the new one.

Next, edit the syslinux.cfg file.  Find the line that looks like this: [code]default vmlinuz initrd=initrd.gz pmedia=usbflash
Change it to look like this:

Code: Select all

default vmlinuz initrd=initrd.gz pmedia=usbflash vga=785
(Don't change it to look exactly like that, just add the vga=785 part. The rest of the line will vary from machine to machine)

Now it should be finished. If all goes well, a reboot will start you up with a nice refreshing splash instead of text. If not, let me know exactly what you did, and post a copy of your menu.lst (please put it within the

Code: Select all

 [/code ] tags, it's easier to read that way).

Now it should be finished.  If all goes well, a reboot will start you up with a nice refreshing splash instead of text.  If not, let me know exactly what you did, and post a copy of your syslinux.cfg (please put it within the [code ] [/code ] tags, it's easier to read that way).



[b][u]Technical Details[/u][/b]
You can skip this if you don't care how it works.  If you're interested in themeing, you'll want to read this.  Also usefull if you want to add Pebble to a version of Puppy I haven't provided a package for.

Okay, here's the brief overview of how Pebble works.  There are three key programs:  /bin/pebble-daemon, /bin/pebble, and /bin/worm.  You don't need to be concerned with /bin/worm, that's just the daemon that takes care of the input logging (logged to /tmp/boot-text.log).  You never interface with it directly - it's controlled by /bin/pebble.  /bin/pebble-daemon is the program that does the actual work of displaying the images.  It is not controled directly either though, as that would be tedious.  Instead, /bin/pebble is the main interface point, but since the name "pebble" isn't very descriptive, it is symlinked to /bin/bootsplash, which is how I call it in all the files I've provided. It is required that you use /bin/bootsplash rather than /bin/pebble, because I also added a symlink /bin/shutdownsplash, and /bin/pebble detects which one you use.  The only difference between them is using /bin/shutdownsplash gets the theme from /etc/pebble/theme_shutdown rather than /etc/pebble/theme.  This is to allow you to set up a shutdown screen, though I don't currently support that feature.  If you want the shutdown splash, you'll have to modify the shutdown scripts appropriately yourself, because I don't have the time to do it, nor to explain it.  The commands are the same as for a boot-splash though, but with [b]shutdownsplash[/b] instead of [b]bootsplash[/b].  That's all I'm going to discuss about it.  From here on, I'm talking about the bootsplash.

So to start the daemon, you'd call [b]bootsplash start[/b], and to stop it, you'd do [b]bootsplash stop[/b].  I'll go ahead and list all the options you should be using at this point (there are more if you read the scripts and sources, but they're leftovers from various other schemes, which I've neglected to delete in case I need them again):
[quote][b]bootsplash start[/b]
This starts the daemon.  It should only be used at the very beginning, to start things up.
[b]bootsplash pause[/b]
This pauses the daemon and restores the normal screen output.  You need to use this command before places in the boot process where things need to be shown to the user, such as the keyboard wizard, choosing a save file, etc.
[b]bootsplash resume[/b]
This resumes the daemon where it left off, after a pause.  Do NOT use this after a switch_root!  (that uses revive)
[b]bootsplash switch_root[/b]
This is necissary before Puppy does the switch_root or pivot_root.  It hibernates the daemon (saves the current state and frame, then shuts down without adjusting the display), and moves any important files (like the pipe) into the new filesystem.  Note:  This needs to be run before /proc and co. are unmounted (several lines above the switch_root, no biggie)
[b]bootsplash revive[/b]
This is what you use in /etc/rc.d/rc.sysinit to start the daemon back up after the switch_root.  It will load the previously saved frame and stage and continue where it left off.  (In a full-hd install, there never was a swicth_root, so in that case this command will run some special full-hd install only setup things).  This command must be run [i]after[/i] /proc has been remounted as rw.  You can go ahead and move the text to below this though, and redirect it to /dev/console if it isn't already.
[b]bootsplash next[/b]
This one increments the stage.  (This does not "overflow", so if you have more next's than you have stages, it will just ignore the superfluous calls).
[b]bootsplash previous[/b]
This decrements the stage, and is "underflow" safe the same as bootsplash next.
[b]bootsplash stop[/b]
This shuts down the daemon and restores the normal output.  It gets used at the end of the boot process (I reccomend /etc/rc.d/rc.local0).[/quote]
In case you're wondering about the stages, it's basically support for multiple animations.  See the section on theme format for more info.

These commands will mostly be in the /init (or /sbin/init for 2.xx) file of the initrc.gz file.  There are also some in /etc/rc.d/rc.country, rc.country-PUP217, rc.local0, and rc.sysinit, at least in Puppy 3.01.  In other versions you'll need them in other spots.  Usually you'll want the [b]stop[/b] in rc.local0 though.

Just adding all these commands isn't enough though.  Puppy needs to have the frame-buffer enabled for this to work.  That's easy enough, just boot with the vga=785 option.  However, you'd find that doing that alone would render all CLI text invisible.  This is because you need to load the fbcon module for the console to output to the framebuffer.  Puppy doesn't have that module by default, so I compiled it myself, and added a line in /init to modprobe it (which was nice compared to in older Puppies that didn't have modprobe in initrd.gz, so you had to use zcat piped to insmod on fbcon and all its dependant modules, which was kind of ugly).

And that sums up most all the changes I had to make.

If you want still more info, you can compare the packages I provided with the standards.  Also, I uploaded an extra package that contains the originals of all the modified files, along with the source and all the extra modules.  I apologize in advance about the source being kind of messy and undocumented.  I worked off of the nifty FBV image viewer app to avoid having to immediately write my own image processing rutines (I do plan to do that eventually).  Unfortunately, the author of FBV didn't seem to be fond of commenting his code.  Also, I haven't gotten around to cleaning up the src directory, so you'll find that the ./configure script is broken.  It isn't needed anyways, just use make.  Any documentation or license info in there is also the original stuff.  Mostly the only things I've altered are main.c and the make file.  The original source should be available online, just check his old documentation for a link.  If not, I should have it on my drive somewhere.  (I fully intend to clean everything up soon, but I'm a pretty busy guy and cleaning is low on my priority list).


[b][u]Theme Format[/u][/b]
First off, the only supported image format is now .jpg.  You could recompile it with .png and .bmp if you felt like it, and probably even .gif (but not animated .gif files).  You'd have to modify the config.h and Make.conf files appropriately, and by hand (./configure is broken ATM).
Okay, now to explain how this works.  So far, it isn't very complex.  When Pebble starts, it reads /etc/pebble/theme to get the name of the theme to use.  Then it reads /etc/pebble/<theme_name>/theme.conf to get the configuration.  So if you have [b]theme[/b] set to [b]paw_fade[/b] it will load /etc/pebble/paw_fade/theme.conf.

The theme.conf files look like this:
[code]ram_glutton	false

stage
	fps			20
	images		stage_1
	loop		true
	loop_start	13
end_stage

stage
	fps			30
	images		stage_2
	loop		false
end_stage
This is a very simple example (though they don't get much more complicated). It has a single stage, looped, at 40 "frames per second". I quote that, because it isn't exact and will actually run a little slower than that (improving that is on the to-do list).

Before I continue, I should explain what a stage is. They are basically a method to have multiple animations, so that you can update things throughout the boot process. Each stage is one animation, and they're stored in the order defined. When you run bootsplash next it will move on to the next animation in the sequence, and bootsplash previous goes to the previous animation. In this way, you could implement a loading bar. You'd set the first stage's image to be an empty bar, the second stage's as a 10% bar, the third's as a 20%, etc. Then incriment it every so often within the boot scripts.

It's not as robust as I'd like yet, as it can only be incremented and decremented. You can't just tell it to use stage 4. I'll improve it some day, but it's not high on my priority list.

Okay, so now that that's clear (hopefully), I'll explain the file on a line-by-line basis:

Code: Select all

ram_glutton	false
This can be set to either true or false. It's essentially an option to make a tradeoff, of ram for speed. If you leave it set to false, Pebble will load only one image at a time. When it goes to the next frame, it unloads the old image and loads the next. This can be a little slow. Enabling ram_glutton will cause it to load every single frame (in every single stage!) right at the beginning, and keep them loaded until it's shut down. That means it might take a little longer to start up, but then it will run more quickly and without eating as much CPU time. However, this uses a LOT of ram, as the images are stored completely decompressed within ram. If you have, say, a 40 frame animation using 800x600 jpg images, it can easily use 50+ mb of ram. Thus why it's optional. You should enable it for small animations, especially if it's just a single frame (no such thing as static, just animations with a single frame), otherwise that same image will keep getting loaded and unloaded, which is pretty stupid.

Code: Select all

stage
This initiates a stage section.

Code: Select all

	fps			20
This sets the framerate for the stage, in "frames per second" (yes, each stage can have its own framerate). The actual framerate will be slightly little lower than this, but with version 0.9 it should be pretty close now. You probably shouldn't go higher than 60 either, due to monitor refresh rates...

Code: Select all

	images		stage_1
This one is important. It sets the location to look for the stage's images. How it works is like this: "/etc/pebble/<theme>/<stage_image_option>/*", so if you're using the theme paw_fade, the images this refers to would be at /etc/pebble/paw_fade/stage_1/. Now I need to explain how animation works. Basically, it just goes through all the files in that directory in alphabetical order. So it's best to name them as 0000.jpg, 0001.jpg, 0002.jpg, etc. so that you ensure they get played in the correct sequence. (Starting with 0 and working up will help when you get to the loop_start option...)

Code: Select all

	loop		true
This sets whether it loops or not. If you set it to false, it will just play through the sequence once, then stop on the last frame.

Code: Select all

	loop_start	13
This one only applies if looping is true. It sets which frame (numerically) starts the looping sequence. So in this case, it will play through the entire sequence of frames once, then after finishing the final frame it will warp back to frame 13, then continue through the sequence, always looping back to 13 after it finishes. This is a good way to have an "intro" effect, like the fade-in that the paw_fade uses. In that case though, it has looping set to false, since it doesn't change after the fade. But with this option, you could have it fade in, then have an animation afterward. Then using loop_start would be handy, so you wouldn't have to keep re-playing the intro.
And please take note: This goes by number, NOT filename. It doesn't care if an image is named 13.jpg, m.jpg, or Zeratul.jpg, so long as it comes 14'th when they're put in alphabetical order. No, that isn't a typo. I'm indexing from 0, so the first frame is 0, the second is 1, etc. This is why I suggested naming your images starting with 0000.jpg. If you don't like it, hey, this is open source. Just go add a +1 in the appropriate place, recompile, and add the new binary to /bin in initrd.gz and the normal filesystem.

Code: Select all

end_stage
This ends the stage section.

Then it just goes into another stage section. As you can see, you don't do anything special like numbering the stages. Just define them in order. Also, you can have multiple stages pointing at the same location for images. That might come in handy if you want the first and last sections the same, but need something different in the middle. Or if you want to alter the looping or framerate mid-way through.

And, that's a theme file.


Adding a new theme
If you want to add a new theme, you'll need to edit the initrd.gz file and add it to the relevant place (etc/pebble/). Don't forget to set etc/pebble/theme to contain the name of the theme. During the boot process, any new themes will automatically be copied from initrd.gz into the save_file, as long as they don't already exist (currently, it will not overwrite any existing file other than /etc/pebble/theme, though I plan to improve it so it can tell which files are newer). If you use a Full-HD install, you can actually just install the theme in the main filesystem since you have no initrd.gz file.

To edit initrd.gz, open a terminal in the same location as it (make sure it's a linux partition), and run this:

Code: Select all

mkdir initrd-tree
cd initrd-tree
zcat ../initrd.gz | cpio -i -d
That will make a directory initrd-tree that contains the contents of the initrd.gz file. Go inside and edit away. When you're finished, from inside the initrd-tree directory, run these commands:

Code: Select all

find . | cpio -o -H newc | gzip -9 > ../initrd.gz
That will replace the old initrd.gz file with the new one. Now just copy that into the correct place, and you're good to go!
Note: There may be an error/difference with Puppy's cpio program, resulting in an absurdly large initrd.gz due to dereferencing symlinks. There are a couple solutions. The simplist is to use the dev package I provided below. It includes a script you can just click to build the new initrd.gz file. Make any changes in the new-initrd-stuff directory, and click the makecpioinitrd script. Or, you could just overwrite Puppy's cpio with the one included in the dev package, then follow the first set of instructions I posted. If you happen to have the unleashed-core installed for Puppy 3.xx, you could also steal the cpio program from the boot/ directory of it, as that's the same one I used.



Packages
http://www.browserloadofcoolness.com/so ... ebble/1.0/
The pre-packaged packages are named pebble_p###-1.0.tar.gz, where ### is the version (214, 301, etc).

People who want to make a remaster using Pebble should also grab the packages named pebble_inst###-1.0.tar.gz. What they contain are updated versions of the puppyinstaller and grubconfig scripts. That way when someone runs the installer, it will offer choices to configure Pebble too. The package for Puppy 3.01 will work fine in 3.00 too (puppyinstallyer only had minor changes between versions, and grubconfig had none) so I didn't make a 3.00 only package.


This is the developer package, which includes everything in the above packages, along with original scripts and the source.
pebble_dev-1.0.tar.gz
In the 400/ 300/ 301/ 214/ and 214R/ directories, you'll find these directories:
generic/
initrd-tree_ORIG/
new-init-stuff/
pup_xxx/
unleashed_extras/
z_ORIG_SCRIPTS/
along with this script:
makecpioinitrd
Clicking that script will create a directory "initrd-tree" and populate it with the combined contents of initrd-tree_ORIG and new-init-stuff, then build a new initrd.gz file. You can use that as an easy way to modify things. The z_ORIG_SCRIPTS/ directory has the original versions of the scripts I modified (other than init, which is in initrd-tree_ORIG/). The pup_xxx/ directory is the same as the "postinit" package, and the unleashed_extras/ directory has the install scripts from the other package.

There are two source directories: pebble_src/ and worm_src/. They have the source of worm and pebble_daemon. You can build them with 'make'. DO NOT run ./configure for pebble, as I have not modified that script to work properly and you'll probably break something. The readme and changelog in the pebble_src/ directory are also still the originals from fbv. I'll clean all this up someday...

The generic/ directory holds the pebble script and binaries of pebble_daemon and worm. There is a 'populate' script inside which will copy those files into the /bin directories of the new-initrd-stuff/ and pup_xxx/ directories for all puppy version directories. Otherwise it can be troublesome to keep them all syncronized when I start tweaking things.

The zz_packages/ directory contains a script which will assemble all of the packages I linked to above. I used to do it by hand when I only supported one or two versions of Puppy, but that started to become tedious so I set this up.


Note: The dev package also contains UNTESTED files for 3.02. I haven't even tried to boot that so I have no idea if it works.


Have fun :P

updated 2008.02.28: fixed harmless glitch in 3.xx full-hd implementations
updated 2008.04.03: fixed another harmless glitch (the "flash" after switch_root)
updated 2008.05.27: added support for Puppy 4.00 (2.6.21.7 kernel only) and improved cleanup code - should now leave behind no temporary files or stalled daemons
updated 2008.11.26: added support for Puppy 4.10 and 4.11 (2.6.25.16 kernel only), corrected a potential race condition, restructured development package to use the original initrd.gz files in place of the initrd-tree_ORIG directories so that the files in /dev don't get corrupted, and added some cleanup scripts to the development package.
updated 2008.12.11: added support for Puppy 4.12 (2.6.25.16 kernel only).
Last edited by Pizzasgood on Thu 11 Dec 2008, 17:42, edited 12 times in total.
[size=75]Between depriving a man of one hour from his life and depriving him of his life there exists only a difference of degree. --Muad'Dib[/size]
[img]http://www.browserloadofcoolness.com/sig.png[/img]

User avatar
Pizzasgood
Posts: 6183
Joined: Wed 04 May 2005, 20:28
Location: Knoxville, TN, USA

#2 Post by Pizzasgood »

For anybody who wants to use this in conjunction with the prettysyslinux thing I set up here:
http://www.murga-linux.com/puppy/viewtopic.php?p=174220
Install Pebble FIRST, then install prettysyslinux SECOND (using the Pebble version of the scripts!).

You can always re-install the prettysyslinux package over Pebble if you installed it previously (and should now anyways, because I updated it tonight). It won't hurt anything.

Techinically, you only need to install the puppyinstaller script after Pebble, because that's the only file that overlaps.

And in case it isn't clear above, the dev package for this version of Pebble does include modified scripts for Puppy 3.02, but I haven't tested those. I haven't even installed 3.02 at all.
[size=75]Between depriving a man of one hour from his life and depriving him of his life there exists only a difference of degree. --Muad'Dib[/size]
[img]http://www.browserloadofcoolness.com/sig.png[/img]

User avatar
Pizzasgood
Posts: 6183
Joined: Wed 04 May 2005, 20:28
Location: Knoxville, TN, USA

#3 Post by Pizzasgood »

If anyone downloaded this already, as of 02:00 GMT-5 Feb 16 2008, you need to redownload (unless you only care about 2.14/2.14R). Just a small tweak to fix a "done" that would appear in the image right after the switch_root.

If you want to correct that yourself, just edit the etc/rc.d/rc.sysinit script and find the part right after all the functions where it checks if there's an /initrd directory, and move that chunk of code down below the "pebble revive" and above the "Now executing rc.sysinit" part.
[size=75]Between depriving a man of one hour from his life and depriving him of his life there exists only a difference of degree. --Muad'Dib[/size]
[img]http://www.browserloadofcoolness.com/sig.png[/img]

User avatar
ecomoney
Posts: 2178
Joined: Fri 25 Nov 2005, 07:00
Location: Lincolnshire, England
Contact:

Documentation

#4 Post by ecomoney »

Very well documented. How would I add a boot parameter to turn graphical booting off in case of a problematic machine and I needed to see the startup messages?
Puppy Linux's [url=http://www.murga-linux.com/puppy/viewtopic.php?p=296352#296352]Mission[/url]

Sorry, my server is down atm!

User avatar
Pizzasgood
Posts: 6183
Joined: Wed 04 May 2005, 20:28
Location: Knoxville, TN, USA

#5 Post by Pizzasgood »

Pizzasgood wrote:Pebble is a very basic boot splash system. It can be disabled with the boot option pfix=nosplash, but there isn't a hot-key to disable it while it's actually booting. Pebble does log the output that is being hidden, and stores it at /tmp/boot-text.log (ignore the ending line about shutting down "worm", that's a harmless glitch (worm is the daemon I wrote that does the input logging)).
Not being sarcastic or anything. That is a reeeaallly long post.

Also, if the machine is having trouble with the framebuffer you might need to use vga=normal pfix=nosplash


EDIT: I went back and bolded the option in the original post. That should help a little.
[size=75]Between depriving a man of one hour from his life and depriving him of his life there exists only a difference of degree. --Muad'Dib[/size]
[img]http://www.browserloadofcoolness.com/sig.png[/img]

User avatar
richard.a
Posts: 513
Joined: Tue 15 Aug 2006, 08:00
Location: Adelaide, South Australia

#6 Post by richard.a »

Wonder if this is the project you were looking at last year that went on the backburner? And will it work with earlier puppies? I ask that because I've no choice but to install nothing later than 2.10pro/2.11 on some boxen that have Intel810 or SIS chipsets. My customisation is geared around 2.10pro/2.11 and also 2.02r2 as a result.

And I have been looking for 2.14r and can't find an ISO anywhere to download through searching the forums and the many websites :(
[i]Have you noticed editing is always needed for the inevitable typos that weren't there when you hit the "post" button?[/i]

[img]http://micro-hard.dreamhosters.com/416434.png[/img]

User avatar
trapster
Posts: 2117
Joined: Mon 28 Nov 2005, 23:14
Location: Maine, USA
Contact:

#7 Post by trapster »

trapster
Maine, USA

Asus eeepc 1005HA PU1X-BK
Frugal install: Slacko
Currently using full install: DebianDog

User avatar
Pizzasgood
Posts: 6183
Joined: Wed 04 May 2005, 20:28
Location: Knoxville, TN, USA

#8 Post by Pizzasgood »

Probably, but I have so many projects on the back burner that I need a new Out house. I did start working on it back in fall 2006 and in spring 2007, then back in fall of 2007.

As for other Puppies, theoretically, but you'd probably have to recompile the kernel modules unless they use 2.6.18.1. You'd definitely have to modify the init scripts by hand. Comparing the ones I included for 2.14 against the originals from 2.14 (which I also included) using TkDiff or GtkDiff would help explain what to do better than anything I could write up. Mostly you just have to find anyplace where you need the user to see output and add a bootsplash pause before and a bootsplash resume after.
[size=75]Between depriving a man of one hour from his life and depriving him of his life there exists only a difference of degree. --Muad'Dib[/size]
[img]http://www.browserloadofcoolness.com/sig.png[/img]

User avatar
Pizzasgood
Posts: 6183
Joined: Wed 04 May 2005, 20:28
Location: Knoxville, TN, USA

#9 Post by Pizzasgood »

Minor tweak as of 21:00 28 Feb 2008: moved a variable initialization in /etc/rc.d/rc.syslinux of 3.xx versions to correct the bug where it shows an error message about a syntax error on a full-hd install. This can be done by hand easily: just edit that file and locate the part that says STATUS=0, then move it to just under the ###MAKING FILESYSTEM USABLE#### part, right above the mount statement. Save it. All better.

I updated the packages too, but I also removed the getline and clean_pupstate functions. Those were holdovers from an earlier version. In 1.0 their functionality was moved into the pebble script itself, but I forgot to delete them from the rc.sysinit file. They weren't hurting anything and only wasted about a kilobyte, so it isn't a big deal or anything.
[size=75]Between depriving a man of one hour from his life and depriving him of his life there exists only a difference of degree. --Muad'Dib[/size]
[img]http://www.browserloadofcoolness.com/sig.png[/img]

User avatar
dinky
Posts: 699
Joined: Sat 19 Jan 2008, 23:39

Usb save files

#10 Post by dinky »

Wow! Really impressed. Have been having a fun time playing around with this. Has worked flawlessly on my frugal hard drive install, less so booting from a live cd to a usb save file. Problems are this:
When I boot the cd, after the boot message the splash screen displays. So far so good. Then when puppy scans my computer for pupsave files, the splash disappears and it asks me what file I wish to boot from. Also good. From then on it's not so great.... once I type in my ecryption password, splash comes back, no matter if I put the wrong password in or not. Also, after about 10 seconds I start seeing boot messages written over the top of the splash screen... any idea how to fix this? Cheers.

User avatar
Pizzasgood
Posts: 6183
Joined: Wed 04 May 2005, 20:28
Location: Knoxville, TN, USA

#11 Post by Pizzasgood »

Hmmm... I'll look into it sometime tomorrow. Which version of Puppy are you running?
[size=75]Between depriving a man of one hour from his life and depriving him of his life there exists only a difference of degree. --Muad'Dib[/size]
[img]http://www.browserloadofcoolness.com/sig.png[/img]

User avatar
dinky
Posts: 699
Joined: Sat 19 Jan 2008, 23:39

#12 Post by dinky »

Thanks for the quick reply. I'm using puppy 3.01, with a version I've remade from wNOP.
I've been creating a pupplet specific for booting up on different computers, thus the need for the usb save file. For now I'm removing the bootscripts of pebble from it, but am hoping to find a way to fix this.. I really like what you've done. Cheers,

~Mitchell

User avatar
Pizzasgood
Posts: 6183
Joined: Wed 04 May 2005, 20:28
Location: Knoxville, TN, USA

#13 Post by Pizzasgood »

I can't seem to replicate that. Are you sure the encryption behaves correctly when not using Pebble? And what is the text that gets displayed? Could it be that you haven't installed the pebble_postinit-1.0.pet in that save file yet? In that case text would start covering the bootsplash about half-way through. If you this is a remaster of one that had it installed, maybe the remaster didn't cover /etc/rc.d/rc.sysinit, rc.local0, and rc.country.


I did notice another harmless bug though. In some versions of Puppy Pebble won't save it's frame data correctly before the switch_root. This is only with the latest releases due to a bug I introduced when I made it 2.14R compatible. I never really liked the piece of code involved, so I've rewritten that part so it should work write on all Puppies, without the dependency on grep during init. I haven't uploaded it yet though, because I want to sort out what's wrong with dinky's setup first.
[size=75]Between depriving a man of one hour from his life and depriving him of his life there exists only a difference of degree. --Muad'Dib[/size]
[img]http://www.browserloadofcoolness.com/sig.png[/img]

User avatar
dinky
Posts: 699
Joined: Sat 19 Jan 2008, 23:39

#14 Post by dinky »

Thanks for your reply. I'll have to play around with it soon when I have some more spare time. I was using a savefile from my pupplet 'Tigerpup version 1.2', and had remastered the live cd to include Pebble. I then copied the new Initrd, Zdrv, and Vmllinuz (apart from initrd I should be the same anyway) and rebooted. This is when I ran into trouble. I am basically running the remasters from a frugal hard-drive install, where I edit the savefile on my pc before creating a remastered version from it. I downloaded your package with all of your scripts, copied the folders from pup301, and unleashed, and created the new initrd... would it still be necessary to run the postinit package on the savefile on my flash drive, running from the livecd? I thought this would have been done with the remaster, as I sorted that out by copying and pasting the correct files on my frugal install. Will let you know what I find... Cheers.

User avatar
Pizzasgood
Posts: 6183
Joined: Wed 04 May 2005, 20:28
Location: Knoxville, TN, USA

#15 Post by Pizzasgood »

As long as you grabbed all the files from the 301/pup_xxx/ and 301/unleashed_extras/ directories and also made the new initrd.gz file, all should be well. The postinit package just contains the stuff in pup_xxx/.

Double check that the resulting ISO actually has the modified files though. In Puppy 3.xx you can just click the ISO to mount it. You can also click the pup_301.sfs file, but it I don't remember if that works when you're also running from a pup_301.sfs file. You might have to do it manually:
mount pup_301.sfs /mnt/data -o loop
Then a grep bootsplash /etc/rc.d/rc.sysinit should return the five instances of "bootsplash" in it. If it doesn't return anything, the remaster didn't save those files.

If I remember right, the remaster script will ignore some things in /etc, if not the entire directory, so you might have to put those files in during the part where it lets you modify things after copying the original install but before creating the actual iso.
[size=75]Between depriving a man of one hour from his life and depriving him of his life there exists only a difference of degree. --Muad'Dib[/size]
[img]http://www.browserloadofcoolness.com/sig.png[/img]

User avatar
dinky
Posts: 699
Joined: Sat 19 Jan 2008, 23:39

#16 Post by dinky »

Ok, so that was part of the problem. I'd forgotten that the remaster process resets most of the changes to /etc. The remaster works fine now apart from three issues (all with a pupsave file on a usb flash drive, booting from live cd):

1. For the initial boot with a previous pupsave file, it needs to be booted with the parameter 'puppy pfix=purge'
Not a huge issue, and this makes sense to do anyway, but some personal settings are lost. If this is not done, and booted normally, the boot freezes with multiple lines of code on the screen,(after bootsplash exits) ending with
'Clocksource tsc unstable (delta=127976628ns)
'Time: pit clocksource has been installed'
Works perfectly after this except for the following two issues.

2. When booting from a live cd with an encrypted pupsave file, splash works fine initially, displaying after boot message, and exiting when the choice screen is displayed for which pupsave file to boot from. When I choose the file on the usb drive, one of two things will happen. The splash screen will return (most common), leaving me to type in the password behind it, then press enter, or (less common) work perfectly by exiting again and asking me for the password.

3. Will only work booting from the usb drive if initrd.gz is copied to it. Otherwise sends kernel into panic.

So all up this works, but not perfectly. I'm unsure if I can use this for the release of the pupplet I'm making, though in every other way it's brilliant. Is there a way to fix the problem of not displaying properly with the encrypted password prompts for the pupsave files? Also, initrd.gz needing to be on the usb to boot properly is problematic. While easy when you know it needs to be there, I'm creating this for near total noobs.
Can you think of any easy ways to fix, or tell me how to fix, these issues? Is it possible for initrd.gz not to be need on the usb the pupsave file is on, or to write a script which automatically copies this to the usb when a pupsave file is saved on it?

Thanks again for your help. Cheers.

User avatar
Pizzasgood
Posts: 6183
Joined: Wed 04 May 2005, 20:28
Location: Knoxville, TN, USA

#17 Post by Pizzasgood »

Problem 1 I think is due to something in your particular customization. I've booted a great many times using a half-setup Pebble where the pup_save.2fs file hasn't been touched yet. All that normally happens is that halfway through (when it hits the switch_root/pivot_root) text starts covering the image, and then when the boot is finished the command line won't show a blinking cursor (the real commandline, not RXVT and co.). Maybe I should add some code to check if the save file has Puppy installed yet, and if not shut down Pebble gracefully instead of hibernating it. (Either way it actually terminates gracefully, but the hibernate doesn't restore the previous graphical settings).

For Problem 2, it seemed to work right when I was testing it, and I haven't been able to see anywhere in the code that would cause this. I'll look and test again when I get back on Monday, or else as soon as I have the time.

As for Problem 3, I haven't tested that particular situation, of booting from CD with the save file on the USB with no initrd.gz file. I never thought to. Maybe this influences Problem 2. I have no idea why it would change anything at all, since the CD specifies (to the kernel itself) where the initrd.gz file is. Maybe there's some path-finding code that depends on the initrd.gz file being on the drive or something. I'll check this out too. Worst case scenario is to modify the /etc/rc.d/rc.shutdown script to copy initrd.gz to the same place the pup_save.2fs file is created, which wouldn't be hard. Better to find the actual problem, of course.


Are you using the provided initrd.gz file, building a new one from the files I uploaded, or first editing things before creating it?
[size=75]Between depriving a man of one hour from his life and depriving him of his life there exists only a difference of degree. --Muad'Dib[/size]
[img]http://www.browserloadofcoolness.com/sig.png[/img]

User avatar
dinky
Posts: 699
Joined: Sat 19 Jan 2008, 23:39

#18 Post by dinky »

<Are you using the provided initrd.gz file, building a new one from the files I uploaded, or first editing things before creating it?>

I'm not sure what you mean here. My process has been to untar your full package (the one with everything on it), create the initrd.gz file from the scripts provided, copy all the other files to their various places, then place the new initrd.gz file in the right place. After that I set the vga=785, and reboot. Does this answer your question?

User avatar
Pizzasgood
Posts: 6183
Joined: Wed 04 May 2005, 20:28
Location: Knoxville, TN, USA

#19 Post by Pizzasgood »

Yup. Thanks. I'll try to look into this when I get out of class today, unless I suddenly realize there's a big flaw in the robot-steering-assembly-code I wrote over the weekend, which would have to take priority.
[size=75]Between depriving a man of one hour from his life and depriving him of his life there exists only a difference of degree. --Muad'Dib[/size]
[img]http://www.browserloadofcoolness.com/sig.png[/img]

User avatar
Pizzasgood
Posts: 6183
Joined: Wed 04 May 2005, 20:28
Location: Knoxville, TN, USA

#20 Post by Pizzasgood »

Sorry, but I still haven't noticed anything like what you describe. Does it behave normally if you don't use an initrd.gz and pup_xxx.sfs file with Pebble? What about using them with Pebble, but booting with puppy pfix=nosplash?

This is weird.
[size=75]Between depriving a man of one hour from his life and depriving him of his life there exists only a difference of degree. --Muad'Dib[/size]
[img]http://www.browserloadofcoolness.com/sig.png[/img]

Post Reply