VirtualBox

source: vbox/trunk/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec@ 47058

Last change on this file since 47058 was 46874, checked in by vboxsync, 12 years ago

Linux installer: crap

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 16.2 KB
Line 
1#
2# Spec file for creating VirtualBox rpm packages
3#
4
5#
6# Copyright (C) 2006-2012 Oracle Corporation
7#
8# This file is part of VirtualBox Open Source Edition (OSE), as
9# available from http://www.virtualbox.org. This file is free software;
10# you can redistribute it and/or modify it under the terms of the GNU
11# General Public License (GPL) as published by the Free Software
12# Foundation, in version 2 as it comes in the "COPYING" file of the
13# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
15#
16
17%define %SPEC% 1
18%define %OSE% 1
19%{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
20
21Summary: Oracle VM VirtualBox
22Name: %NAME%
23Version: %BUILDVER%_%BUILDREL%
24Release: 1
25URL: http://www.virtualbox.org/
26Source: VirtualBox.tar.bz2
27License: GPLv2
28Group: Applications/System
29Vendor: Oracle Corporation
30BuildRoot: %BUILDROOT%
31Requires: %INITSCRIPTS% %LIBASOUND%
32
33%if %{?rpm_suse:1}%{!?rpm_suse:0}
34%debug_package
35%endif
36
37%MACROSPYTHON%
38
39
40%description
41VirtualBox is a powerful PC virtualization solution allowing
42you to run a wide range of PC operating systems on your Linux
43system. This includes Windows, Linux, FreeBSD, DOS, OpenBSD
44and others. VirtualBox comes with a broad feature set and
45excellent performance, making it the premier virtualization
46software solution on the market.
47
48
49%prep
50%setup -q
51DESTDIR=""
52unset DESTDIR
53
54
55%build
56
57
58%install
59# Mandriva: prevent replacing 'echo' by 'gprintf'
60export DONT_GPRINTIFY=1
61rm -rf $RPM_BUILD_ROOT
62install -m 755 -d $RPM_BUILD_ROOT/sbin
63install -m 755 -d $RPM_BUILD_ROOT%{_initrddir}
64install -m 755 -d $RPM_BUILD_ROOT/lib/modules
65install -m 755 -d $RPM_BUILD_ROOT/etc/vbox
66install -m 755 -d $RPM_BUILD_ROOT/usr/bin
67install -m 755 -d $RPM_BUILD_ROOT/usr/src
68install -m 755 -d $RPM_BUILD_ROOT/usr/share/applications
69install -m 755 -d $RPM_BUILD_ROOT/usr/share/pixmaps
70install -m 755 -d $RPM_BUILD_ROOT/usr/share/icons/hicolor
71install -m 755 -d $RPM_BUILD_ROOT%{_defaultdocdir}/virtualbox
72install -m 755 -d $RPM_BUILD_ROOT/usr/lib/virtualbox
73install -m 755 -d $RPM_BUILD_ROOT/usr/lib/virtualbox/ExtensionPacks
74install -m 755 -d $RPM_BUILD_ROOT/usr/share/virtualbox
75install -m 755 -d $RPM_BUILD_ROOT/usr/share/mime/packages
76mv VBoxEFI32.fd $RPM_BUILD_ROOT/usr/lib/virtualbox || true
77mv VBoxEFI64.fd $RPM_BUILD_ROOT/usr/lib/virtualbox || true
78mv *.gc $RPM_BUILD_ROOT/usr/lib/virtualbox
79mv *.r0 $RPM_BUILD_ROOT/usr/lib/virtualbox
80mv *.rel $RPM_BUILD_ROOT/usr/lib/virtualbox || true
81mv VBoxNetDHCP $RPM_BUILD_ROOT/usr/lib/virtualbox
82mv VBoxNetAdpCtl $RPM_BUILD_ROOT/usr/lib/virtualbox
83if [ -f VBoxVolInfo ]; then
84 mv VBoxVolInfo $RPM_BUILD_ROOT/usr/lib/virtualbox
85fi
86mv VBoxXPCOMIPCD $RPM_BUILD_ROOT/usr/lib/virtualbox
87mv components $RPM_BUILD_ROOT/usr/lib/virtualbox/components
88mv *.so $RPM_BUILD_ROOT/usr/lib/virtualbox
89mv *.so.4 $RPM_BUILD_ROOT/usr/lib/virtualbox || true
90ln -s ../VBoxVMM.so $RPM_BUILD_ROOT/usr/lib/virtualbox/components/VBoxVMM.so
91mv VBoxTestOGL $RPM_BUILD_ROOT/usr/lib/virtualbox
92mv vboxshell.py $RPM_BUILD_ROOT/usr/lib/virtualbox
93(export VBOX_INSTALL_PATH=/usr/lib/virtualbox && \
94 cd ./sdk/installer && \
95 %{__python} ./vboxapisetup.py install --prefix %{_prefix} --root $RPM_BUILD_ROOT)
96rm -rf sdk/installer
97mv sdk $RPM_BUILD_ROOT/usr/lib/virtualbox
98mv nls $RPM_BUILD_ROOT/usr/share/virtualbox
99cp -a src $RPM_BUILD_ROOT/usr/share/virtualbox
100mv VBox.sh $RPM_BUILD_ROOT/usr/bin/VBox
101mv VBoxSysInfo.sh $RPM_BUILD_ROOT/usr/share/virtualbox
102mv VBoxCreateUSBNode.sh $RPM_BUILD_ROOT/usr/share/virtualbox
103cp icons/128x128/virtualbox.png $RPM_BUILD_ROOT/usr/share/pixmaps/virtualbox.png
104cd icons
105 for i in *; do
106 if [ -f $i/virtualbox.png ]; then
107 install -d $RPM_BUILD_ROOT/usr/share/icons/hicolor/$i/apps
108 mv $i/virtualbox.png $RPM_BUILD_ROOT/usr/share/icons/hicolor/$i/apps
109 fi
110 install -d $RPM_BUILD_ROOT/usr/share/icons/hicolor/$i/mimetypes
111 mv $i/* $RPM_BUILD_ROOT/usr/share/icons/hicolor/$i/mimetypes || true
112 rmdir $i
113 done
114cd -
115rmdir icons
116mv virtualbox.xml $RPM_BUILD_ROOT/usr/share/mime/packages
117for i in VBoxManage VBoxSVC VBoxSDL VirtualBox VBoxHeadless VBoxExtPackHelperApp VBoxBalloonCtrl VBoxAutostart; do
118 mv $i $RPM_BUILD_ROOT/usr/lib/virtualbox; done
119if %WEBSVC%; then
120 for i in vboxwebsrv webtest; do
121 mv $i $RPM_BUILD_ROOT/usr/lib/virtualbox; done
122fi
123for i in VBoxSDL VirtualBox VBoxHeadless VBoxNetDHCP VBoxNetAdpCtl; do
124 chmod 4511 $RPM_BUILD_ROOT/usr/lib/virtualbox/$i; done
125if [ -f $RPM_BUILD_ROOT/usr/lib/virtualbox/VBoxVolInfo ]; then
126 chmod 4511 $RPM_BUILD_ROOT/usr/lib/virtualbox/VBoxVolInfo
127fi
128if [ -d ExtensionPacks/VNC ]; then
129 mv ExtensionPacks/VNC $RPM_BUILD_ROOT/usr/lib/virtualbox/ExtensionPacks
130fi
131mv VBoxTunctl $RPM_BUILD_ROOT/usr/bin
132%if %{?is_ose:0}%{!?is_ose:1}
133for d in /lib/modules/*; do
134 if [ -L $d/build ]; then
135 rm -f /tmp/vboxdrv-Module.symvers
136 ./src/vboxhost/build_in_tmp \
137 --save-module-symvers /tmp/vboxdrv-Module.symvers \
138 --module-source `pwd`/src/vboxhost/vboxdrv \
139 KBUILD_VERBOSE= KERN_DIR=$d/build MODULE_DIR=$RPM_BUILD_ROOT/$d/misc -j4 \
140 %INSTMOD%
141 ./src/vboxhost/build_in_tmp \
142 --use-module-symvers /tmp/vboxdrv-Module.symvers \
143 --module-source `pwd`/src/vboxhost/vboxnetflt \
144 KBUILD_VERBOSE= KERN_DIR=$d/build MODULE_DIR=$RPM_BUILD_ROOT/$d/misc -j4 \
145 %INSTMOD%
146 ./src/vboxhost/build_in_tmp \
147 --use-module-symvers /tmp/vboxdrv-Module.symvers \
148 --module-source `pwd`/src/vboxhost/vboxnetadp \
149 KBUILD_VERBOSE= KERN_DIR=$d/build MODULE_DIR=$RPM_BUILD_ROOT/$d/misc -j4 \
150 %INSTMOD%
151 ./src/vboxhost/build_in_tmp \
152 --use-module-symvers /tmp/vboxdrv-Module.symvers \
153 --module-source `pwd`/src/vboxhost/vboxpci \
154 KBUILD_VERBOSE= KERN_DIR=$d/build MODULE_DIR=$RPM_BUILD_ROOT/$d/misc -j4 \
155 %INSTMOD%
156 fi
157done
158%endif
159%if %{?is_ose:0}%{!?is_ose:1}
160 mv kchmviewer $RPM_BUILD_ROOT/usr/lib/virtualbox
161 for i in rdesktop-vrdp.tar.gz rdesktop-vrdp-keymaps; do
162 mv $i $RPM_BUILD_ROOT/usr/share/virtualbox; done
163 mv rdesktop-vrdp $RPM_BUILD_ROOT/usr/bin
164%endif
165for i in additions/VBoxGuestAdditions.iso; do
166 mv $i $RPM_BUILD_ROOT/usr/share/virtualbox; done
167if [ -d accessible ]; then
168 mv accessible $RPM_BUILD_ROOT/usr/lib/virtualbox
169fi
170install -D -m 755 vboxdrv.init $RPM_BUILD_ROOT%{_initrddir}/vboxdrv
171%if %{?rpm_suse:1}%{!?rpm_suse:0}
172ln -sf ../etc/init.d/vboxdrv $RPM_BUILD_ROOT/sbin/rcvboxdrv
173%endif
174install -D -m 755 vboxballoonctrl-service.init $RPM_BUILD_ROOT%{_initrddir}/vboxballoonctrl-service
175install -D -m 755 vboxautostart-service.init $RPM_BUILD_ROOT%{_initrddir}/vboxautostart-service
176install -D -m 755 vboxweb-service.init $RPM_BUILD_ROOT%{_initrddir}/vboxweb-service
177%if %{?rpm_suse:1}%{!?rpm_suse:0}
178ln -sf ../etc/init.d/vboxballoonctrl-service $RPM_BUILD_ROOT/sbin/rcvboxballoonctrl-service
179ln -sf ../etc/init.d/vboxautostart-service $RPM_BUILD_ROOT/sbin/rcvboxautostart-service
180ln -sf ../etc/init.d/vboxweb-service $RPM_BUILD_ROOT/sbin/rcvboxweb-service
181%endif
182ln -s VBox $RPM_BUILD_ROOT/usr/bin/VirtualBox
183ln -s VBox $RPM_BUILD_ROOT/usr/bin/virtualbox
184ln -s VBox $RPM_BUILD_ROOT/usr/bin/VBoxManage
185ln -s VBox $RPM_BUILD_ROOT/usr/bin/vboxmanage
186ln -s VBox $RPM_BUILD_ROOT/usr/bin/VBoxSDL
187ln -s VBox $RPM_BUILD_ROOT/usr/bin/vboxsdl
188ln -s VBox $RPM_BUILD_ROOT/usr/bin/VBoxVRDP
189ln -s VBox $RPM_BUILD_ROOT/usr/bin/VBoxHeadless
190ln -s VBox $RPM_BUILD_ROOT/usr/bin/vboxheadless
191ln -s VBox $RPM_BUILD_ROOT/usr/bin/VBoxBalloonCtrl
192ln -s VBox $RPM_BUILD_ROOT/usr/bin/vboxballoonctrl
193ln -s VBox $RPM_BUILD_ROOT/usr/bin/VBoxAutostart
194ln -s VBox $RPM_BUILD_ROOT/usr/bin/vboxautostart
195ln -s VBox $RPM_BUILD_ROOT/usr/bin/vboxwebsrv
196ln -s /usr/share/virtualbox/src/vboxhost $RPM_BUILD_ROOT/usr/src/vboxhost-%VER%
197mv virtualbox.desktop $RPM_BUILD_ROOT/usr/share/applications/virtualbox.desktop
198mv VBox.png $RPM_BUILD_ROOT/usr/share/pixmaps/VBox.png
199
200
201%pre
202# defaults
203[ -r /etc/default/virtualbox ] && . /etc/default/virtualbox
204
205# check for active VMs of the installed (old) package
206VBOXSVC_PID=`pidof VBoxSVC 2>/dev/null || true`
207if [ -n "$VBOXSVC_PID" ]; then
208 # executed before the new package is installed!
209 if [ -f /etc/init.d/vboxballoonctrl-service ]; then
210 # try graceful termination; terminate the balloon control service first
211 /etc/init.d/vboxballoonctrl-service stop 2>/dev/null || true
212 fi
213 if [ -f /etc/init.d/vboxautostart-service ]; then
214 # try graceful termination; terminate the autostart service first
215 /etc/init.d/vboxautostart-service stop 2>/dev/null || true
216 fi
217 if [ -f /etc/init.d/vboxweb-service ]; then
218 # try graceful termination; terminate the webservice first
219 /etc/init.d/vboxweb-service stop 2>/dev/null || true
220 fi
221 # ask the daemon to terminate immediately
222 kill -USR1 $VBOXSVC_PID
223 sleep 1
224 if pidof VBoxSVC > /dev/null 2>&1; then
225 echo "A copy of VirtualBox is currently running. Please close it and try again."
226 echo "Please note that it can take up to ten seconds for VirtualBox (in particular"
227 echo "the VBoxSVC daemon) to finish running."
228 exit 1
229 fi
230fi
231
232# check for old installation
233if [ -r /etc/vbox/vbox.cfg ]; then
234 . /etc/vbox/vbox.cfg
235 if [ "x$INSTALL_DIR" != "x" -a -d "$INSTALL_DIR" ]; then
236 echo "An old installation of VirtualBox was found. To install this package the"
237 echo "old package has to be removed first. Have a look at /etc/vbox/vbox.cfg to"
238 echo "determine the installation directory of the previous installation. After"
239 echo "uninstalling the old package remove the file /etc/vbox/vbox.cfg."
240 exit 1
241 fi
242fi
243
244# XXX remove old modules from previous versions (disable with INSTALL_NO_VBOXDRV=1 in /etc/default/virtualbox)
245if [ "$INSTALL_NO_VBOXDRV" != "1" ]; then
246 find /lib/modules -name "vboxdrv\.*" 2>/dev/null|xargs rm -f 2> /dev/null || true
247 find /lib/modules -name "vboxnetflt\.*" 2>/dev/null|xargs rm -f 2> /dev/null || true
248 find /lib/modules -name "vboxnetadp\.*" 2>/dev/null|xargs rm -f 2> /dev/null || true
249 find /lib/modules -name "vboxpci\.*" 2>/dev/null|xargs rm -f 2> /dev/null || true
250fi
251
252
253%post
254#include installer-common.sh
255
256LOG="/var/log/vbox-install.log"
257
258# defaults
259[ -r /etc/default/virtualbox ] && . /etc/default/virtualbox
260
261# remove old cruft
262if [ -f /etc/init.d/vboxdrv.sh ]; then
263 echo "Found old version of /etc/init.d/vboxdrv.sh, removing."
264 rm /etc/init.d/vboxdrv.sh
265fi
266if [ -f /etc/vbox/vbox.cfg ]; then
267 echo "Found old version of /etc/vbox/vbox.cfg, removing."
268 rm /etc/vbox/vbox.cfg
269fi
270rm -f /etc/vbox/module_not_compiled
271
272# XXX SELinux: allow text relocation entries
273%if %{?rpm_redhat:1}%{!?rpm_redhat:0}
274set_selinux_permissions /usr/lib/virtualbox /usr/share/virtualbox
275%endif
276
277# create users groups (disable with INSTALL_NO_GROUP=1 in /etc/default/virtualbox)
278if [ "$INSTALL_NO_GROUP" != "1" ]; then
279 echo
280 echo "Creating group 'vboxusers'. VM users must be member of that group!"
281 echo
282 groupadd -f vboxusers 2> /dev/null
283fi
284
285# install udev rule (disable with INSTALL_NO_UDEV=1 in /etc/default/virtualbox)
286# and /dev/vboxdrv and /dev/vboxusb/*/* device nodes
287install_device_node_setup root 0600 /usr/share/virtualbox "${usb_group}"
288%if %{?rpm_redhat:1}%{!?rpm_redhat:0}
289/sbin/chkconfig --add vboxdrv
290/sbin/chkconfig --add vboxballoonctrl-service
291/sbin/chkconfig --add vboxautostart-service
292/sbin/chkconfig --add vboxweb-service
293%endif
294%if %{?rpm_suse:1}%{!?rpm_suse:0}
295%{fillup_and_insserv -f -y -Y vboxdrv vboxballoonctrl-service vboxautostart-service vboxweb-service}
296%endif
297%if %{?rpm_mdv:1}%{!?rpm_mdv:0}
298/sbin/ldconfig
299%_post_service vboxdrv
300%_post_service vboxballoonctrl-service
301%_post_service vboxautostart-service
302%_post_service vboxweb-service
303%update_menus
304%endif
305update-mime-database /usr/share/mime &> /dev/null || :
306update-desktop-database -q > /dev/null 2>&1 || :
307touch --no-create /usr/share/icons/hicolor
308gtk-update-icon-cache -q /usr/share/icons/hicolor 2> /dev/null || :
309
310# Disable module compilation with INSTALL_NO_VBOXDRV=1 in /etc/default/virtualbox
311BUILD_MODULES=0
312REGISTER_MODULES=1
313if [ ! -f /lib/modules/`uname -r`/misc/vboxdrv.ko ]; then
314 REGISTER_MODULES=0
315 if [ "$INSTALL_NO_VBOXDRV" != "1" ]; then
316 # compile problem
317 cat << EOF
318No precompiled module for this kernel found -- trying to build one. Messages
319emitted during module compilation will be logged to $LOG.
320
321EOF
322 BUILD_MODULES=1
323 fi
324fi
325# if INSTALL_NO_VBOXDRV is set to 1, remove all shipped modules
326if [ "$INSTALL_NO_VBOXDRV" = "1" ]; then
327 rm -f /lib/modules/*/misc/vboxdrv.ko
328 rm -f /lib/modules/*/misc/vboxnetflt.ko
329 rm -f /lib/modules/*/misc/vboxnetadp.ko
330 rm -f /lib/modules/*/misc/vboxpci.ko
331fi
332if [ $BUILD_MODULES -eq 1 ]; then
333 /etc/init.d/vboxdrv setup || true
334else
335 if lsmod | grep -q "vboxdrv[^_-]"; then
336 /etc/init.d/vboxdrv stop || true
337 fi
338 if [ $REGISTER_MODULES -eq 1 ]; then
339 DKMS=`which dkms 2>/dev/null`
340 if [ -n "$DKMS" ]; then
341 $DKMS remove -m vboxhost -v %VER% --all > /dev/null 2>&1 || true
342 fi
343 fi
344 /etc/init.d/vboxdrv start > /dev/null
345fi
346/etc/init.d/vboxballoonctrl-service start > /dev/null
347/etc/init.d/vboxautostart-service start > /dev/null
348/etc/init.d/vboxweb-service start > /dev/null
349
350
351%preun
352# $1==0: remove the last version of the package
353# $1==1: install the first time
354# $1>=2: upgrade
355%if %{?rpm_suse:1}%{!?rpm_suse:0}
356%stop_on_removal vboxballoonctrl-service
357%stop_on_removal vboxautostart-service
358%stop_on_removal vboxweb-service
359%endif
360%if %{?rpm_mdv:1}%{!?rpm_mdv:0}
361%_preun_service vboxballoonctrl-service
362%_preun_service vboxautostart-service
363%_preun_service vboxweb-service
364%endif
365%if %{?rpm_redhat:1}%{!?rpm_redhat:0}
366if [ "$1" = 0 ]; then
367 /sbin/service vboxballoonctrl-service stop > /dev/null
368 /sbin/chkconfig --del vboxballoonctrl-service
369 /sbin/service vboxautostart-service stop > /dev/null
370 /sbin/chkconfig --del vboxautostart-service
371 /sbin/service vboxweb-service stop > /dev/null
372 /sbin/chkconfig --del vboxweb-service
373fi
374%endif
375
376if [ "$1" = 0 ]; then
377 # check for active VMs
378 VBOXSVC_PID=`pidof VBoxSVC 2>/dev/null || true`
379 if [ -n "$VBOXSVC_PID" ]; then
380 kill -USR1 $VBOXSVC_PID
381 sleep 1
382 if pidof VBoxSVC > /dev/null 2>&1; then
383 echo "A copy of VirtualBox is currently running. Please close it and try again."
384 echo "Please note that it can take up to ten seconds for VirtualBox (in particular"
385 echo "the VBoxSVC daemon) to finish running."
386 exit 1
387 fi
388 fi
389fi
390%if %{?rpm_suse:1}%{!?rpm_suse:0}
391%stop_on_removal vboxdrv
392%endif
393%if %{?rpm_mdv:1}%{!?rpm_mdv:0}
394%_preun_service vboxdrv
395%endif
396if [ "$1" = 0 ]; then
397%if %{?rpm_redhat:1}%{!?rpm_redhat:0}
398 /sbin/service vboxdrv stop > /dev/null
399 /sbin/chkconfig --del vboxdrv
400%endif
401 rm -f /etc/udev/rules.d/10-vboxdrv.rules
402 rm -f /etc/vbox/license_agreed
403 rm -f /etc/vbox/module_not_compiled
404fi
405DKMS=`which dkms 2>/dev/null`
406if [ -n "$DKMS" ]; then
407 $DKMS remove -m vboxhost -v %VER% --all > /dev/null 2>&1 || true
408fi
409
410
411%postun
412%if %{?rpm_redhat:1}%{!?rpm_redhat:0}
413if [ "$1" -ge 1 ]; then
414 /sbin/service vboxdrv restart > /dev/null 2>&1
415 /sbin/service vboxballoonctrl-service restart > /dev/null 2>&1
416 /sbin/service vboxautostart-service restart > /dev/null 2>&1
417 /sbin/service vboxweb-service restart > /dev/null 2>&1
418fi
419%endif
420%if %{?rpm_suse:1}%{!?rpm_suse:0}
421%restart_on_update vboxdrv vboxballoonctrl-service vboxautostart-service vboxweb-service
422%insserv_cleanup
423%endif
424%if %{?rpm_mdv:1}%{!?rpm_mdv:0}
425/sbin/ldconfig
426%{clean_desktop_database}
427%clean_menus
428%endif
429update-mime-database /usr/share/mime &> /dev/null || :
430update-desktop-database -q > /dev/null 2>&1 || :
431touch --no-create /usr/share/icons/hicolor
432gtk-update-icon-cache -q /usr/share/icons/hicolor 2> /dev/null || :
433rm -rf /usr/lib/virtualbox/ExtensionPacks
434
435
436%clean
437rm -rf $RPM_BUILD_ROOT
438
439
440%files
441%defattr(-,root,root)
442%doc %{!?is_ose: LICENSE}
443%doc UserManual*.pdf
444%doc %{!?is_ose: VirtualBox*.chm}
445%{_initrddir}/vboxdrv
446%{_initrddir}/vboxballoonctrl-service
447%{_initrddir}/vboxautostart-service
448%{_initrddir}/vboxweb-service
449%{?rpm_suse: %{py_sitedir}/*}
450%{!?rpm_suse: %{python_sitelib}/*}
451%{?rpm_suse: /sbin/rcvboxdrv}
452%{?rpm_suse: /sbin/rcvboxballoonctrl-service}
453%{?rpm_suse: /sbin/rcvboxautostart-service}
454%{?rpm_suse: /sbin/rcvboxweb-service}
455/etc/vbox
456/usr/bin/*
457/usr/src/vbox*
458/usr/lib/virtualbox
459/usr/share/applications/*
460/usr/share/icons/hicolor/*/apps/*
461/usr/share/icons/hicolor/*/mimetypes/*
462/usr/share/mime/packages/*
463/usr/share/pixmaps/*
464/usr/share/virtualbox
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette