Re: Opera 10.60 Download address

Ruari Ødegaard <[email protected]> Mon, 05 Jul 2010 11:56:20 +0200
Newsgroups gmane.comp.web.opera.linux
Organization Opera
Message-ID <[email protected]>
On Mon, 05 Jul 2010 10:41:24 +0200, Serdar Dalgic <[email protected]>  
wrote:

> Hi;
>
> I'm packaging opera for my distro Pardus. I always get used to download  
> new
> versions of opera from
>  http://get.opera.com/pub/opera/linux
>
> Although previous versions of opera was put into an address like
>
> http://get.opera.com/pub/opera/linux/1011/final/en/i386/opera-10.11.gcc4-qt4.i386.tar.bz2
>
> 10.60 is put into
> http://get.opera.com/pub/opera/linux/1060/opera-10.60-6386.i386.linux.tar.gz
>
> adress. Also, the content layout of the archives are different too.
>
> Is this a choice or will you upload a "final" version of opera 10.60  
> that is
> compiled with gcc4 and qt4?

This is final and yes we choose for it to be this way. The reason it that  
Opera is no longer dependant on Qt and as such it is no longer mentioned.  
As for the gcc4 reference this is gone because we only build against newer  
versions of gcc now. Previously the 'gcc3' packages where for distros that  
were too old to have libstdc++.so.6 but that did have libstdc++.so.5.  
These days it is almost impossible to find a vendor supported distro that  
does not have libstdc++.so.6 and hence we dropped support for the 'gcc3'  
packages. With only one version there is little point in mentioning gcc as  
part of the file name.

If you want to know more about the new packages I would encourage you to  
read this blog post:
http://my.opera.com/ruario/blog/new-opera-unix-packages-arrive-deb-rpm-tar

If that is a little too long for you I can probably cut to the chase of  
with regards to the point you probably care about 'repackaging'.

The biggest problem for you is likely the fat that the 'prefix'/'DESTDIR'  
options do not exist as part of the newly rewritten install script. This  
makes repacking more cumbersome, though not impossible. Indeed I do it  
myself for the Arch Linux distribution.

You now have three options:

1. Pull part the .deb or .rpm package and use its contents as part of your  
repack.
2. Patch the install script so that you can install to an alternative  
location.
3. Without using the install shift around the contents of the tar package  
and patch various PREFIX and SUFFIX variables within the *.desktop, MIME  
and man files.

Despite initially sounding a little odd, option 1 is _by far_ the easiest  
method and is what I personally favour for the Arch PKGBUILD (which I  
unofficially maintain) and also what Robby Workman is using for the  
Slackware Slackbuild. Both of which are repackaging scripts for their  
respective distros. If you want to see these in action:

http://aur.archlinux.org/packages.php?ID=10333
http://slackbuilds.org/repository/13.1/network/opera/

If you do go down this route and decide to use the .deb instead of the  
rpm, either 'ar' or the libarchive utilities (e.g. 'bsdcpio' and 'bsdtar')  
can pull apart the package and you can then extract the contents of the  
internally contained 'data.tar.gz'. You do need to  exclude the Debian  
specific 'usr/share/lintian' directory and  
'usr/share/doc/opera/changelog.Debian.gz' files however.

For example, assuming the use of '/tmp/repack' as your repackaging working  
directory, download a .deb appropriate for your hardware architecture and  
issue the following:

$ ar p opera_10.51-6252_i386.deb data.tar.gz | tar xz --exclude  
changelog.Debian.gz --exclude lintian -C /tmp/repack

You will also need to alter the package-id.ini to change the package type  
to be 'tar', to avoid causing a bug with our 'native' widgets  
implementation.

$ sed -i /tmp/repack/usr/share/opera/package-id.ini -e "s|\(Package  
Type=\)deb|\1tar|"

Alternatively the .rpm file can be opened with tools such libarchive or  
'rpm2cpio' as demonstrated in the Arch PKGBUILD and Slackbuild  
respectively. (In this case change "s|\(Package Type=\)deb|\1tar|" to  
"s|\(Package Type=\)rpm|\1tar|")


If you can't or won't do option 1 then here is one example of option 2:  
patching the install script. Again this example would place Opera in  
'/tmp/repack' with the Opera (start up scripts, *.desktop, MIME and man)  
file paths set for a later install into the top level of '/usr'.

You need to patch via 3 regex, which ensure the following: (i) Files are  
placed in repackaging directory; (ii) Internal paths are set to '/usr';  
(iii) Prevent calls to 'update-desktop-database' and  
'update-mime-database' (not needed yet as this is repackaging, not a final  
install). Here is a simple demo:

$ sed -i install -e "s|dest=\$PREFIX|dest=/tmp/repack/usr|" -e  
"s|\$HOME/.local|/usr|" -e "s|update-[a-z]*-database|XXpatchedXX|"

Once done you can then 'Install' quietly to the repackaging directory via  
the following command:

$ ./install --user --quiet
(if you want feedback use '--unattended' instead of '--quiet')

Before repackaging you also need to remove the unneeded uninstall script  
(since the native package manager will handle uninstall).

$ rm /tmp/repack/usr/bin/uninstall-opera


Finally, for completion here is option 3 (manually shifting around the  
contents of the tar package and patching various PREFIX and SUFFIX  
variables). As you can see this is the most involved, so I'll include some  
comments:


$ mkdir -p /tmp/repack/usr/bin

# Create 'opera' and 'opera-widget-manager' wrapper scripts and make them  
executable

$ cat <<EOF > /tmp/repack/usr/bin/opera
> #!/bin/shexport OPERA_DIR=\${OPERA_DIR:-/usr/share/opera}exec  
> /usr/lib/opera/opera "\$@"
> EOF
$ cat <<EOF > /tmp/repack/usr/bin/opera-widget-manager
> #!/bin/shexec /usr/bin/opera --widgetmanager "\$@"
> EOF
$ chmod 755 /tmp/repack/usr/bin/opera*

# Copy over 'lib/' and 'share/'

$ cp -R lib /tmp/repack/usr/
$ cp -R share /tmp/repack/usr/

# Patch variables in the *.desktop, MIME and man files to reflect the  
final install location.

$ sed -i /tmp/repack/usr/share/applications/opera-browser.desktop -e  
"s|@@{PREFIX}|/usr|" -e "s|@@{[U_]*SUFFIX}||"
$ sed -i /tmp/repack/usr/share/applications/opera-widget-manager.desktop  
-e "s|@@{PREFIX}|/usr|" -e "s|@@{[U_]*SUFFIX}||"
$ sed -i /tmp/repack/usr/share/applications/opera-widget-installer.desktop  
-e "s|@@{PREFIX}|/usr|" -e "s|@@{[U_]*SUFFIX}||"
$ sed -i /tmp/repack/usr/share/mime/packages/opera-widget.xml -e  
"s|@@{[U_]*SUFFIX}||"
$ sed -i /tmp/repack/usr/share/mime/packages/opera-unite-application.xml  
-e "s|@@{[U_]*SUFFIX}||"
$ gzip -d /tmp/repack/usr/share/man/man1/opera.1.gz
$ sed -i /tmp/repack/usr/share/man/man1/opera.1 -e "s|@@{PREFIX}|/usr|" -e  
"s|@@{[U_]*SUFFIX}||"
$ gzip /tmp/repack/usr/share/man/man1/opera.1
$ gzip -d /tmp/repack/usr/share/man/man1/opera-widget-manager.1.gz
$ sed -i /tmp/repack/usr/share/man/man1/opera-widget-manager.1 -e  
"s|@@{PREFIX}|/usr|" -e "s|@@{[U_]*SUFFIX}||"
$ gzip /tmp/repack/usr/share/man/man1/opera-widget-manager.1


I hope it is clear why I favour option 1. ;)

And before you ask, yes we do plan to revive the 'prefix'/'DESTDIR'  
options in a future release to simplify this for those those who need to  
repackage Opera. As someone who does this myself, I eagerly await this fix.

If you have further questions please ask.

> Thanks for your answer.


-- 
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
--
Opera-Linux: https://list.opera.com/mailman/listinfo/opera-linux
More lists: https://list.opera.com/mailman/listinfo/
Unsubscribe: mailto:[email protected]?subject=unsubscribe