pUPnGO - 6Mb ISO - Basic Building Block Puplet

A home for all kinds of Puppy related projects
Message
Author
goingnuts
Posts: 932
Joined: Sun 07 Dec 2008, 13:33
Contact:

#676 Post by goingnuts »

Now I got the GUI-part of mplayer working too but build grows to 6800K - whereof the 1000K comes via iconv - which can be disabled but that tends to exclude some sub-titles...Is there anyway to minimize the influence of iconv? Otherwise most stuff is working (dynamic load of dll´s, osd, dvd-play etc.)

I have been working on cleaning/modifying my tinyX11-source - attached the present status.

I have also looked at the Xvesa/Xfbdev source in order to get some of the extensions running (DPMS, MIT-SHM, RENDER, SHAPE, SYNC, TOG-CUP, XTEST and PANORAMIX). Present source attached as well as build of Xvesa/Xfbdev with the mentioned extensions build-in.
20130513: Removed attachments as forum does not support the size anymore
Last edited by goingnuts on Mon 13 May 2013, 17:41, edited 1 time in total.

goingnuts
Posts: 932
Joined: Sun 07 Dec 2008, 13:33
Contact:

#677 Post by goingnuts »

Finally got a decent build of MPlayer-1.0pre8 with uclibc and the above tinyX. Changed version of iconv to libiconv-1.6.1 and reduced size inpact with 400K. Also merged mplayer and mencoder (via mcb) so the final size (ex. fonts and skin) is approx. 6500K which decrease to just above 3000K with upx. Still big but one get a gui mediaplayer and an advanced video-converter for that price.
The audio and video outputs are:

Code: Select all

Available audio output drivers:
        mpegpes DVB audio output
        oss     OSS/ioctl audio output
        sdl     SDLlib audio output
        null    Null audio output
        pcm     RAW PCM/WAVE file writer audio output
        
Available video output drivers:
        xv      X11/Xv
        x11     X11 ( XImage/Shm )
        xover   General X11 driver for overlay capable video output drivers
        sdl     SDL YUV/RGB/BGR renderer (SDL v1.1.7+ only!)
        fbdev   Framebuffer Device
        fbdev2  Framebuffer Device
        xvidix  X11 (VIDIX)
        cvidix  console VIDIX
        null    Null video output
        mpegpes Mpeg-PES to DVB card
        yuv4mpeg        yuv4mpeg output for mjpegtools
        png     PNG file
        jpeg    JPEG file
        tga     Targa output
        pnm     PPM/PGM/PGMYUV file
        md5sum  md5sum of each frame
        
and you get osd, scalable subtitles, a bunch of video filters to play with, DVD-player etc.
If you download the win32 dlls from here you also can play quicktime, vmw and a lot of other formates. I have added osd fonts and subtitle fonts in the pet package that can be fetched here
You will probably want to use xorg for best performance but also the Xvesa shipped above gives a nice view. The shipped skin is really minimalistic but you can hunt others that might fit better in you taste.
I did not include the videx drivers - they link dynamic against uclibc - are rarely needed (AFAIK) - and disabling videx only saved 15K...

User avatar
technosaurus
Posts: 4853
Joined: Mon 19 May 2008, 01:24
Location: Blue Springs, MO
Contact:

#678 Post by technosaurus »

@goingnuts: I was planning to look through and condense the tinyx11 sources, but I noticed you put a GPL2 license in the trunk which I presume overrides the X11 licenses beneath? If this was intentional, I'll start over with the original sources (you are welcome to use any changes in the GPL'd version).

I want to make it optimized for static builds so I had planned to replace typedef's and enums with defines and replacing some small functions (small enough that they are smaller to inline) with macros. This will also make for a much smaller shared library too without adding to binary size (at the cost of losing some type checking - there will only be char, short, long/int, long long, float, double and structs of those types) though I do have one big concern with this approach:

Code: Select all

typedef int* int_p1;
int_p1 a, b, c;  // a, b, and c are all int pointers.
#define int_p2 int* int_p2 a, b, c;  // only the first is a pointer
regardless I am attaching one of the tools I use to find dups in case anyone else needs it
Attachments
duplo.tar.gz
a tool to find dupilcate code (recommend at least setting the -ip option though)
(28.48 KiB) Downloaded 774 times
Check out my [url=https://github.com/technosaurus]github repositories[/url]. I may eventually get around to updating my [url=http://bashismal.blogspot.com]blogspot[/url].

goingnuts
Posts: 932
Joined: Sun 07 Dec 2008, 13:33
Contact:

#679 Post by goingnuts »

technosaurus: The GPL2 was what was used with my GtkDialog1 backport exercise - so just copied it from there. I am not trying to restrict or violate anything - just more or less in the dark with witch license to put there in order not to restrict any usage without violating any original license. Any hint there are welcome.

I have made some additions/changes since I posted the source (to be able to compile more programs/get Xvesa and other programs run in xwoaf as well). If you would like to work with my sources I can post an updated version. But you might get more what you want and maybe less work starting with the full original source anyway...

User avatar
technosaurus
Posts: 4853
Joined: Mon 19 May 2008, 01:24
Location: Blue Springs, MO
Contact:

#680 Post by technosaurus »

As long as you didn't use any gpl code in it, it can keep the x11 license.

I was really just wanting to kill all the compiler warnings in recent compilers (gcc and clang at least) by giving the proper return type (mostly void or int), but any time I look @ code its hard to resist performance/size tweaks. Most everything else is already done in tinyx, but duplo did identify several duplicate code blocks.
Check out my [url=https://github.com/technosaurus]github repositories[/url]. I may eventually get around to updating my [url=http://bashismal.blogspot.com]blogspot[/url].

goingnuts
Posts: 932
Joined: Sun 07 Dec 2008, 13:33
Contact:

#681 Post by goingnuts »

Uploaded below my present source of tinyXlib. From Changelog:
20120719: Changed ICElib to include transport to make ROX-Filer compile.
20120916: Added GetFPath.c to get Abiword 1.0.7 compile. Added X11/Xmu/Misc.h for XawM-1.5u.
20121002: Added ListExt.c and QuBest.c to X11 for xdpyinfo
20121011: Changed libXt source and include/X11/Intrinsic.h to test if Xaw can be compiled. Added GetDflt.c to tinyX11 and added -DXOS_USE_MTSAFE_PWDAPI to tinyXll make flags
Removed file Copying as well.
I have not tested the libXaw much but at least it compiled the attached xload - which is using approx 700k when running compared to the dynamic linked xload which uses approx 3400k...
Now we might have most of the tools to do a mcb of most of the X-utilities.

Anyone know where sources for absvolume has gone?
20130513: Removed attachment as forum does not support the size anymore
Last edited by goingnuts on Mon 13 May 2013, 17:42, edited 1 time in total.

User avatar
technosaurus
Posts: 4853
Joined: Mon 19 May 2008, 01:24
Location: Blue Springs, MO
Contact:

#682 Post by technosaurus »

Small tip on the static builds, if you still use -ffunction-sections -fdata-sections when you build the objects (.o files), you can get a list of unused functions and data by doing the final link with -Wl,--gc-sections,--print-gc-sections (output to a file for later use). Then you can use that data to remove all of the useless functions and data from the .c/.h files. When you build shared libs, they will be _almost_ as small as a single static build (added space for position independent code and elf data).
This is essentially what libopt and the perl script in either uclibc or uclibc++ do (i don't recall which) except they use the symbol tables more directly using objdump or similar.
Check out my [url=https://github.com/technosaurus]github repositories[/url]. I may eventually get around to updating my [url=http://bashismal.blogspot.com]blogspot[/url].

goingnuts
Posts: 932
Joined: Sun 07 Dec 2008, 13:33
Contact:

#683 Post by goingnuts »

Static build of tightvncserver/viewer 1.3.10...replaced the perl vncserver-script with rarsa´s shell-version...

goingnuts
Posts: 932
Joined: Sun 07 Dec 2008, 13:33
Contact:

#684 Post by goingnuts »

Trying to implement some multiuser capabilities in pupngo...but run into a lot of things not working. Most things have been fixed but uncertain on some of the solutions so guidelines would be helpful:

* Many configuration scripts and wizards uses /tmp for temp-files and I have changed user/owner of /tmp to spot and given group r+w. That helps a lot but still no way for spot to overwrite files created by root. So should the wizards use the users home dir for temporary files or is there another/better way?

* The mount/umount command is for superuser only - any workaround for this to give a normal user those rights?

* Running udhcpc to configure the network has the same problem: Only root have the power to get an ip...any suggestions beside configure at boot-time?

I would like to prevent using sudo if possible...

User avatar
technosaurus
Posts: 4853
Joined: Mon 19 May 2008, 01:24
Location: Blue Springs, MO
Contact:

#685 Post by technosaurus »

Check out my [url=https://github.com/technosaurus]github repositories[/url]. I may eventually get around to updating my [url=http://bashismal.blogspot.com]blogspot[/url].

goingnuts
Posts: 932
Joined: Sun 07 Dec 2008, 13:33
Contact:

#686 Post by goingnuts »

Thanks! And found a gtk1-source at amigos place :)
Guess the use of gksu or su should be coded in for every function where it is needed...(?).
Implemented the real su as BB-su had some limitations. Working on a solution for CLI only like the below modification in mount-script:

Code: Select all

if [ ! $(id -u) = 0 ]; then
  TARGET="${@}"
  su -c "mount-FULL -n ${TARGET}" root
else
  mount-FULL -n ${@}
fi
which works - and could be expanded to lookup a list of users where mount is enabled. Guess I have to adapt this to every other function that need roots privilege for making scripts working (mkdir in /mnt, umount etc...).

Update 20121210: Found that it is very difficult to get "su -c "some_command" running from scripts when in X. Replaced with sudo things are much easier...changed above snippet to:

Code: Select all

if [ ! $(id -u) = 0 ]; then
[ $(which sudo) ] && sudo mount-FULL -n ${@}
else
mount-FULL -n ${@}
fi
Update 20121213: sudo need /etc/sudoers configured. Found that one need to add "Defaults env_keep += "HOME"" to keep the HOME of spot when using sudo. This influence the icon_unmounted_func/icon_mounted_func which controls the ROX drive icon change when mount/umount are used. Strange thing is that the icon change when mounting/unmounting is very slow (slowest when umount) and icon change faster in .pup_event than on the desktop...

bark_bark_bark
Posts: 1885
Joined: Tue 05 Jun 2012, 12:17
Location: Wisconsin USA

#687 Post by bark_bark_bark »

hello. I think this is a great project and I am currently am using "pUPnGO_V216_060611.iso" through QEMU and so far it works great. I have had no problems with the GUI_V412.sfs either. pUPnGO is the best and I hope you can keep it alive. I will actually install it on a computer soon.
....

User avatar
BarryK
Puppy Master
Posts: 9392
Joined: Mon 09 May 2005, 09:23
Location: Perth, Western Australia
Contact:

#688 Post by BarryK »

goingnuts wrote:Thanks! And found a gtk1-source at amigos place :)
Guess the use of gksu or su should be coded in for every function where it is needed...(?).
Implemented the real su as BB-su had some limitations. Working on a solution for CLI only like the below modification in mount-script:

Code: Select all

if [ ! $(id -u) = 0 ]; then
  TARGET="${@}"
  su -c "mount-FULL -n ${TARGET}" root
else
  mount-FULL -n ${@}
fi
which works - and could be expanded to lookup a list of users where mount is enabled. Guess I have to adapt this to every other function that need roots privilege for making scripts working (mkdir in /mnt, umount etc...).

Update 20121210: Found that it is very difficult to get "su -c "some_command" running from scripts when in X. Replaced with sudo things are much easier...changed above snippet to:

Code: Select all

if [ ! $(id -u) = 0 ]; then
[ $(which sudo) ] && sudo mount-FULL -n ${@}
else
mount-FULL -n ${@}
fi
Update 20121213: sudo need /etc/sudoers configured. Found that one need to add "Defaults env_keep += "HOME"" to keep the HOME of spot when using sudo. This influence the icon_unmounted_func/icon_mounted_func which controls the ROX drive icon change when mount/umount are used. Strange thing is that the icon change when mounting/unmounting is very slow (slowest when umount) and icon change faster in .pup_event than on the desktop...
Woof-built pups have this in first line of many scripts, ex /usr/sbin/pmount:

Code: Select all

[ "`whoami`" != "root" ] && exec sudo -A ${0} ${@}
Woof-built pups have /etc/sudo.conf:

Code: Select all

# sudo 1.7.2 required askpass in /etc/sudoers, but 1.8.1p2 reports that as a syntax error
# and requires it in this file (see: http://www.gratisoft.us/sudo/man/1.8.0/sudo.man.html)
Path askpass /usr/sbin/askpass
So, the script gets re-executed at 'root' level.

Oh, /etc/sudoers:

Code: Select all

# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
# Failure to use 'visudo' may result in syntax or file permission errors
# that prevent sudo from running.
#
# See the sudoers man page for the details on how to write a sudoers file.
#
# 120110 added /usr/sbin/delayedrun to SYSTEM category. also, see sudo line added to script.

# Host alias specification

# User alias specification

# Cmnd alias specification
Cmnd_Alias     SHUTDOWN = /sbin/poweroff, /sbin/reboot, /usr/sbin/snapmergepuppy
Cmnd_Alias     SYSTEM = /sbin/pup_event_frontend_d, /usr/sbin/delayedrun

# Defaults specification
Defaults	env_reset
Defaults	env_keep="HOME PATH DISPLAY HOSTNAME LANG"
Defaults	editor=/usr/bin/mp
# asks for root password (not user), only one attempt allowed...
Defaults:users	runaspw, passwd_tries=1

# sudo 1.7.2 needs this, for 1.8.1 it is specified in /etc/sudo.conf...
# Defaults:ALL	askpass=/usr/sbin/askpass

# Runas alias specification

# User privilege specification
root	ALL=(ALL) ALL

# Uncomment to allow people in group wheel to run all commands
# %wheel	ALL=(ALL) ALL

# Same thing without a password
# %wheel	ALL=(ALL) NOPASSWD: ALL

# Samples
# %users  ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users  localhost=/sbin/shutdown -h now

# fido belongs to users group...
# %users	ALL=(ALL) ALL

# want to run certain apps without asking for password...
# %users ALL=(SHUTDOWN) NOPASSWD: ALL
%users	ALL=(ALL) ALL, NOPASSWD: SHUTDOWN, SYSTEM
I don't know if any of the above is useful for you, just thought I would post it in case it, or part of it, is.
[url]https://bkhome.org/news/[/url]

goingnuts
Posts: 932
Joined: Sun 07 Dec 2008, 13:33
Contact:

#689 Post by goingnuts »

bark_bark_bark: :D I have it running on two old Pentium laptops - they are constructed to be rolled over by a tank and will probably last for 15 years more :lol: Funnny thing is that the batteries still works - I have laptops with an age of less than 3 years where battery is totally exhausted and they need instant external power to boot.

BarryK: :D Thanks a lot! The

Code: Select all

[ "`whoami`" != "root" ] && exec sudo -A ${0} ${@}
is brilliant - so much easier than my above codings. Adapted some of your sudo configs as well - thanks.


Still have very slow change of icons on ROX-desktop (GTK1.2-version) after mount/umount when run as spot - haven't got closer to speed it up - strange...but might be a missing call to ROX to revise status of file.

All this multiuser is quite a pain to get right - but a lot of fun and visit of places in code one seldom pay attention 8)

Started to convert pmount to gtkdialog1 - realized that I need mut - and after finding the source and building of a static bin - almost done...

Probably old common knowledge but mut is actually a multicall binary giving us:
mut mutd mutdaemon mutforeground mutclient probepart probedisk probedisk2 probepci drivelist guess_fstype mounts mediaplug
in a 183K static bin. I haven't tested all for differences in output or speed but attached a package if anyone feels in testing mode...

The probedisk script gives:
real 0m0.203s
user 0m0.060s
sys 0m0.080s

The mut probedisk gives:
real 0m0.100s
user 0m0.000s
sys 0m0.000s

so might speed up things if its not too hard to implement.
Attachments
mut2-src-1.3.2.1238_static.tar.gz
(80.35 KiB) Downloaded 498 times

User avatar
technosaurus
Posts: 4853
Joined: Mon 19 May 2008, 01:24
Location: Blue Springs, MO
Contact:

#690 Post by technosaurus »

goingnuts wrote:Still have very slow change of icons on ROX-desktop (GTK1.2-version) after mount/umount when run as spot - haven't got closer to speed it up - strange...but might be a missing call to ROX to revise status of file.
I don't know how far back it goes, but I know there was some kind of major rox fix to speed it up that involved creating a file/folder/variable
Started to convert pmount to gtkdialog1 - realized that I need mut - and after finding the source and building of a static bin - almost done...
I had written a similar program that used my xpm generating shell functions for the %used/free - let me know if I need to look for it.
Check out my [url=https://github.com/technosaurus]github repositories[/url]. I may eventually get around to updating my [url=http://bashismal.blogspot.com]blogspot[/url].

User avatar
greengeek
Posts: 5789
Joined: Tue 20 Jul 2010, 09:34
Location: Republic of Novo Zelande

#691 Post by greengeek »

technosaurus wrote:I don't know how far back it goes, but I know there was some kind of major rox fix to speed it up that involved creating a file/folder/variable.
I recall amigo made a comment about hostname in this topic about rox speed:
http://www.murga-linux.com/puppy/viewto ... 7&start=34
How does pUPnGO handle hostname? Could that be an issue?

goingnuts
Posts: 932
Joined: Sun 07 Dec 2008, 13:33
Contact:

#692 Post by goingnuts »

greengeek: Thanks for the pointer. Adapted the modified hostname handling but with no luck.

After some tracking of what is going on it seems that as spot I run into this message from ROX:
"Existing ROX-Filer process is not responding! Try with -n"
which is spawn in ROX source-file "remoce.c" (origin from function "remote_init" which does include some hostname lookup).
The call (as spot) for "SetIcon" (in functions4puppy4) seems to run ok (no errors reported) but icon does not change. If I follow the request for "SetIcon" with a request for update (rox -x ${HOME}/.pup_event/drive_${1}) - in the functions4puppy4 script - I get the above error...

If I ask for the update (as spot) from rxvt command line it happens instantly. If I refresh the file view in /home/spot/.pup_event-folder it change the icon in the folder but icon on desktop is first changed when I move my mouse over the icon.

I am sure there is a single sign or two in some files that just has to be changed - its just how to find it....

As root it is fast changing and no problems at all.

User avatar
technosaurus
Posts: 4853
Joined: Mon 19 May 2008, 01:24
Location: Blue Springs, MO
Contact:

#693 Post by technosaurus »

goingnuts wrote:After some tracking of what is going on it seems that as spot I run into this message from ROX:
"Existing ROX-Filer process is not responding! Try with -n"
which is spawn in ROX source-file "remoce.c" (origin from function "remote_init" which does include some hostname lookup).
The call (as spot) for "SetIcon" (in functions4puppy4) seems to run ok (no errors reported) but icon does not change. If I follow the request for "SetIcon" with a request for update (rox -x ${HOME}/.pup_event/drive_${1}) - in the functions4puppy4 script - I get the above error...

If I ask for the update (as spot) from rxvt command line it happens instantly. If I refresh the file view in /home/spot/.pup_event-folder it change the icon in the folder but icon on desktop is first changed when I move my mouse over the icon.

I am sure there is a single sign or two in some files that just has to be changed - its just how to find it....

As root it is fast changing and no problems at all.
I think rox uses sockets for its IPC and may have some assumptions as to not changing the user without restarting rox (for most distros this is true - spot is a hack in reverse polish notation)
that message sounds like one of the following IPC related issues:
incorrect permissions to access socket/pipe (file permission issue)
using the user name to find $HOME and expecting a file and/or directory structure to be there _and_ be the expected file/permissions/etc...
made up examples
/root/.rox-socket != /root/spot/.rox-socket
/root/spot/.config/... does not exist
looking for /tmp/rox478578-spot, but the actual is /tmp/rox478578-root
(It has been too long since I examined the IPC code, but that was the general idea)
Check out my [url=https://github.com/technosaurus]github repositories[/url]. I may eventually get around to updating my [url=http://bashismal.blogspot.com]blogspot[/url].

goingnuts
Posts: 932
Joined: Sun 07 Dec 2008, 13:33
Contact:

#694 Post by goingnuts »

technosaurus: Thanks - you are probably very right. I have tried to create spot as a real user with HOME in /home/spot where spot owns everything etc. I think I will let the ROX desktop-icon-change for spot rest for a while - might change other things that fix it :?

Just an other observation: When ROX is told to update the icon blinky is showing activity...

Ibidem
Posts: 549
Joined: Wed 26 May 2010, 03:31
Location: State of Jefferson

#695 Post by Ibidem »

goingnuts wrote:Uploaded below my present source of tinyXlib. From Changelog:
20120719: Changed ICElib to include transport to make ROX-Filer compile.
20120916: Added GetFPath.c to get Abiword 1.0.7 compile. Added X11/Xmu/Misc.h for XawM-1.5u.
20121002: Added ListExt.c and QuBest.c to X11 for xdpyinfo
20121011: Changed libXt source and include/X11/Intrinsic.h to test if Xaw can be compiled. Added GetDflt.c to tinyX11 and added -DXOS_USE_MTSAFE_PWDAPI to tinyXll make flags
Removed file Copying as well.
I have not tested the libXaw much but at least it compiled the attached xload - which is using approx 700k when running compared to the dynamic linked xload which uses approx 3400k...
I managed to build this with musl, though it took a couple trivial changes:
1- The error messages were getting lost because it ignored failed compiles in subdirectories.
This can be fixed one of two ways:
remove the "; cd .." (safe because each line is in a subshell, so it doesn't change the directory where the next line is)
OR, change all of this to make <target> -C <dirname>
I used

Code: Select all

sed 's/cd \(.*\); \(make.*\);.*/\2 -C \1/g' -i Makefile
2- I deleted -I/usr/include (it can only work when you have a libc that's fully header-compatible with your primary one), which made this start to compile.

3- In libXaw/OS.c, I changed <asm/page.h> to <limits.h>, which defines PAGE_SIZE.

Also, it seems that libXdmcp.so is not being rm'd on make clean.
All told however, much easier to build than the old version with shell build scripts...

Is the tinyXserver-0.01 tarball source for the kdrive servers?

Post Reply