The package glibc is essential to correct operation and cannot be removed using this tool

When I try to update with the system tray icon, I receive this message:


The package glibc is essential to correct operation and cannot be removed using this tool.

I have tried rpmdb --rebuilddd which makes no difference. Zypper update finds nothing to update.

Any ideas welcome - and Happy New Year.

What updates does the GUI updater say are available?

What is the output of:

zypper lr -d

zypper ref

zypper up

(All run as root)

Yes, you cannot remove glibc packages.
Run YaST and try to solve problems with updates.


zypper -lr d



#  | Alias                                 | Name                                                                                        | Enabled | GPG Check | Refresh | Priority | Type   | URI                                                                                          | Service
---+---------------------------------------+---------------------------------------------------------------------------------------------+---------+-----------+---------+----------+--------+----------------------------------------------------------------------------------------------+--------
 1 | 15.5                                  | 15.5_SignalDM                                                                               | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | https://download.opensuse.org/repositories/network:/im:/signal/15.5/                         |
 2 | Keepass                               | Keepass                                                                                     | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | https://download.opensuse.org/repositories/Mono/openSUSE_Tumbleweed                          |
 3 | Printing                              | Printing System Development Project (15.5)                                                  | Yes     | (r ) Yes  | No      |   99     | rpm-md | https://download.opensuse.org/repositories/Printing/15.5/                                    |
 4 | Security_leap15.5                     | Security_leap15.5                                                                           | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | https://download.opensuse.org/repositories/security/15.5/                                    |
 5 | download.nvidia.com-$releasever       | nVidia Graphics Drivers                                                                     | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | https://download.nvidia.com/opensuse/leap/15.5                                               |
 6 | ftp.gwdg.de-openSUSE_Leap_$releasever | Packman Repository                                                                          | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | http://ftp.gwdg.de/pub/linux/misc/packman/suse/openSUSE_Leap_15.5/                           |
 7 | openSUSE-Leap-15.5-1                  | openSUSE-Leap-15.5-1                                                                        | No      | ----      | ----    |   99     | rpm-md | hd:/?device=/dev/disk/by-id/usb-Kingston_DataTraveler_3.0_C860008AE288E2B1990320B1-0:0-part1 |
 8 | repo-backports-debug-update           | Update repository with updates for openSUSE Leap debuginfo packages from openSUSE Backports | No      | ----      | ----    |   99     | NONE   | http://download.opensuse.org/update/leap/15.5/backports_debug/                               |
 9 | repo-backports-update                 | Update repository of openSUSE Backports                                                     | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | http://download.opensuse.org/update/leap/15.5/backports/                                     |
10 | repo-debug                            | Debug Repository                                                                            | No      | ----      | ----    |   99     | NONE   | http://download.opensuse.org/debug/distribution/leap/15.5/repo/oss/                          |
11 | repo-debug-non-oss                    | Debug Repository (Non-OSS)                                                                  | No      | ----      | ----    |   99     | NONE   | http://download.opensuse.org/debug/distribution/leap/15.5/repo/non-oss/                      |
12 | repo-debug-update                     | Update Repository (Debug)                                                                   | No      | ----      | ----    |   99     | NONE   | http://download.opensuse.org/debug/update/leap/15.5/oss/                                     |
13 | repo-debug-update-non-oss             | Update Repository (Debug, Non-OSS)                                                          | No      | ----      | ----    |   99     | NONE   | http://download.opensuse.org/debug/update/leap/15.5/non-oss/                                 |
14 | repo-non-oss                          | Non-OSS Repository                                                                          | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | http://download.opensuse.org/distribution/leap/15.5/repo/non-oss/                            |
15 | repo-openh264                         | Open H.264 Codec (openSUSE Leap)                                                            | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | http://codecs.opensuse.org/openh264/openSUSE_Leap/                                           |
16 | repo-oss                              | Main Repository                                                                             | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | http://download.opensuse.org/distribution/leap/15.5/repo/oss/                                |
17 | repo-sle-debug-update                 | Update repository with debuginfo for updates from SUSE Linux Enterprise 15                  | No      | ----      | ----    |   99     | NONE   | http://download.opensuse.org/debug/update/leap/15.5/sle/                                     |
18 | repo-sle-update                       | Update repository with updates from SUSE Linux Enterprise 15                                | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | http://download.opensuse.org/update/leap/15.5/sle/                                           |
19 | repo-source                           | Source Repository                                                                           | No      | ----      | ----    |   99     | NONE   | http://download.opensuse.org/source/distribution/leap/15.5/repo/oss/                         |
20 | repo-update                           | Main Update Repository                                                                      | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | http://download.opensuse.org/update/leap/15.5/oss                                            |
21 | repo-update-non-oss                   | Update Repository (Non-Oss)                                                                 | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | http://download.opensuse.org/update/leap/15.5/non-oss/                                       |




zypper ref


#  | Alias                                 | Name                                                                                        | Enabled | GPG Check | Refresh | Priority | Type   | URI                                                                                          | Service
---+---------------------------------------+---------------------------------------------------------------------------------------------+---------+-----------+---------+----------+--------+----------------------------------------------------------------------------------------------+--------
 1 | 15.5                                  | 15.5_SignalDM                                                                               | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | https://download.opensuse.org/repositories/network:/im:/signal/15.5/                         |
 2 | Keepass                               | Keepass                                                                                     | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | https://download.opensuse.org/repositories/Mono/openSUSE_Tumbleweed                          |
 3 | Printing                              | Printing System Development Project (15.5)                                                  | Yes     | (r ) Yes  | No      |   99     | rpm-md | https://download.opensuse.org/repositories/Printing/15.5/                                    |
 4 | Security_leap15.5                     | Security_leap15.5                                                                           | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | https://download.opensuse.org/repositories/security/15.5/                                    |
 5 | download.nvidia.com-$releasever       | nVidia Graphics Drivers                                                                     | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | https://download.nvidia.com/opensuse/leap/15.5                                               |
 6 | ftp.gwdg.de-openSUSE_Leap_$releasever | Packman Repository                                                                          | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | http://ftp.gwdg.de/pub/linux/misc/packman/suse/openSUSE_Leap_15.5/                           |
 7 | openSUSE-Leap-15.5-1                  | openSUSE-Leap-15.5-1                                                                        | No      | ----      | ----    |   99     | rpm-md | hd:/?device=/dev/disk/by-id/usb-Kingston_DataTraveler_3.0_C860008AE288E2B1990320B1-0:0-part1 |
 8 | repo-backports-debug-update           | Update repository with updates for openSUSE Leap debuginfo packages from openSUSE Backports | No      | ----      | ----    |   99     | NONE   | http://download.opensuse.org/update/leap/15.5/backports_debug/                               |
 9 | repo-backports-update                 | Update repository of openSUSE Backports                                                     | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | http://download.opensuse.org/update/leap/15.5/backports/                                     |
10 | repo-debug                            | Debug Repository                                                                            | No      | ----      | ----    |   99     | NONE   | http://download.opensuse.org/debug/distribution/leap/15.5/repo/oss/                          |
11 | repo-debug-non-oss                    | Debug Repository (Non-OSS)                                                                  | No      | ----      | ----    |   99     | NONE   | http://download.opensuse.org/debug/distribution/leap/15.5/repo/non-oss/                      |
12 | repo-debug-update                     | Update Repository (Debug)                                                                   | No      | ----      | ----    |   99     | NONE   | http://download.opensuse.org/debug/update/leap/15.5/oss/                                     |
13 | repo-debug-update-non-oss             | Update Repository (Debug, Non-OSS)                                                          | No      | ----      | ----    |   99     | NONE   | http://download.opensuse.org/debug/update/leap/15.5/non-oss/                                 |
14 | repo-non-oss                          | Non-OSS Repository                                                                          | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | http://download.opensuse.org/distribution/leap/15.5/repo/non-oss/                            |
15 | repo-openh264                         | Open H.264 Codec (openSUSE Leap)                                                            | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | http://codecs.opensuse.org/openh264/openSUSE_Leap/                                           |
16 | repo-oss                              | Main Repository                                                                             | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | http://download.opensuse.org/distribution/leap/15.5/repo/oss/                                |
17 | repo-sle-debug-update                 | Update repository with debuginfo for updates from SUSE Linux Enterprise 15                  | No      | ----      | ----    |   99     | NONE   | http://download.opensuse.org/debug/update/leap/15.5/sle/                                     |
18 | repo-sle-update                       | Update repository with updates from SUSE Linux Enterprise 15                                | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | http://download.opensuse.org/update/leap/15.5/sle/                                           |
19 | repo-source                           | Source Repository                                                                           | No      | ----      | ----    |   99     | NONE   | http://download.opensuse.org/source/distribution/leap/15.5/repo/oss/                         |
20 | repo-update                           | Main Update Repository                                                                      | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | http://download.opensuse.org/update/leap/15.5/oss                                            |
21 | repo-update-non-oss                   | Update Repository (Non-Oss)                                                                 | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | http://download.opensuse.org/update/leap/15.5/non-oss/                                       |



zypper up

Loading repository data...
Reading installed packages...

The following 18 package updates will NOT be installed:
  cups-filters ghostscript ghostscript-x11 gutenprint haveged libargon2-1 libbsd0 libcap-ng0 libfido2-1 libfido2-udev libhavege2 libpskc0 libstoken1 libtss2-esys0 libtss2-mu0
  libtss2-rc0 libtss2-sys1 parallel-printer-support
Nothing to do.



Please could you elucidate?

The zypper ref command output isn’t what I expected - that looks to a duplicate of the zypper lr -d command. Can you double check that output?

(It’s best if you just execute the command and copy/paste the full command and the corresponding output).

Sorry, my mistake. And happy new year to you.

> 
> zypper ref
> Repository '15.5_SignalDM' is up to date.                                                                                                                                     
> Repository 'Keepass' is up to date.                                                                                                                                           
> Repository 'Printing System Development Project (15.5)' is up to date.                                                                                                        
> Repository 'Security_leap15.5' is up to date.                                                                                                                                 
> Repository 'nVidia Graphics Drivers' is up to date.                                                                                                                           
> Repository 'Packman Repository' is up to date.                                                                                                                                
> Repository 'Update repository of openSUSE Backports' is up to date.                                                                                                           
> Repository 'Non-OSS Repository' is up to date.                                                                                                                                
> Repository 'Open H.264 Codec (openSUSE Leap)' is up to date.                                                                                                                  
> Repository 'Main Repository' is up to date.                                                                                                                                   
> Repository 'Update repository with updates from SUSE Linux Enterprise 15' is up to date.                                                                                      
> Repository 'Main Update Repository' is up to date.                                                                                                                            
> Repository 'Update Repository (Non-Oss)' is up to date.                                                                                                                       
> All repositories have been refreshed.

Thanks - I was hoping that something here might give us some insight.

What is the output from zypper patch -D? (The -D makes it a dry run, so it’ll give you the messages but won’t make changes to your system). It looks like the updater is actually attempting to apply patches rather than updates; doing this from the CLI might tell us which one is attempting to remove glibc.

Loading repository data…
Reading installed packages…
Resolving package dependencies…

The following 6 NEW patches are going to be installed:
openSUSE-SLE-15.5-2023-4003 openSUSE-SLE-15.5-2023-4110 openSUSE-SLE-15.5-2023-4294 openSUSE-SLE-15.5-2023-4474 openSUSE-SLE-15.5-2023-4561 openSUSE-SLE-15.5-2023-4828

The following 6 packages are going to be REMOVED:
apparmor-docs glibc glibc-32bit glibc-extra libjavascriptcoregtk-4_0-18 nscd

6 packages to remove.
After the operation, 38.2 MiB will be freed.
Continue? [y/n/v/…? shows all options] (y):

It looks like it’s the patch openSUSE-SLE-15.5-2023-4110 that’s addressing an issue in glibc.

If you’re running btrfs on your root partition, then you could install it and see what happens - if the system doesn’t start up, you can boot from a read-only snapshot and then revert to it using the instructions at System Recovery and Snapshot Management with Snapper | Reference | openSUSE Leap 15.0

My guess is that once the patch is applied, if you reboot and run rpm -qa | grep -i glibc, you’ll see a glibc package is in fact still installed.

You could also deselect this patch and apply the others. If you do that, you could check that apparmor-docs is still installed, since the zypper patch -D command shows that that package would be removed when applying the patch.

Deactivate “user friendly” GUIs and stick to KISS (Keep It Super Simple): zypper update:

leap155:~ # zypper update
Loading repository data...
Reading installed packages...
Nothing to do.
leap155:~ # 

You may run the above command in any root shell. For a really robust approach create and run this service in the system slice:

 leap155:~ # systemctl cat upd
# /etc/systemd/system/upd.service
[Unit] 
Description=Dist Update

[Service] 
ExecStart=/usr/bin/zypper --non-interactive update
leap155:~ # 

Start the service and check the journal:

leap155:~ # systemctl start upd
leap155:~ # journalctl --since 8:54 -u upd
Jan 02 08:54:59 leap155 systemd[1]: Started Dist Update.
Jan 02 08:54:59 leap155 zypper[3840]: Loading repository data...
Jan 02 08:55:00 leap155 zypper[3840]: Reading installed packages...
Jan 02 08:55:01 leap155 zypper[3840]: Nothing to do.
Jan 02 08:55:01 leap155 systemd[1]: upd.service: Deactivated successfully.
leap155:~ # 

You are not newbie to not know that you should always show the command itself so the output can be properly interpreted.

Anyway, run

sudo zypper patch --debug-solver

it will create the directory /var/log/zypper.solverTestCase. Tar/zip this directory and make it available. It looks like

bor@leap15:~> sudo zypper patch --debug-solver 
[sudo] password for root: 
Loading repository data...
Reading installed packages...
Resolving package dependencies...
Generating solver test case...
Solver test case generated successfully at /var/log/zypper.solverTestCase.
bor@leap15:~> 

The system is attempting to apply patches, not updates.

I would never, ever recommend running updates in the background, much less scheduled (which I recognize this in and of itself does not do). Not for any OS or system. There’s always the possibility that an update breaks something, and it’s too easy to forget that you’ve set the system up to do this. That leads to support questions that go along the lines of “my system’s broken and I didn’t change anything!” (Except of course, the system’s owner did, they just forgot that they’d set that up.)

1 Like

Patches are subsets of updates. Sometimes patches are the only valid alternative. In the long term updates are the preferred option. I conclude this from some five decades of experience with a huge variety of systems.

I don’t recommend this for every system. However openSUSE improved their processes and procedures in the past decade dramatically. Thus I gave the frequent dup of Tumbleweed a try on infamous host erlangen, which is my main machine.

Host erlangen gets upgraded daily by a scheduled service running in the background.

I frequently read similar claims. Thus I confronted these with reality. I started with host erlangen and subsequently converted all my hosts. As this worked fine I started to convert the hosts of other users as well. And trust me, they don’t pose support questions.

Being consistent is the only prerequisite for this strategy. It helps to ignore 99 percent of less relevant discussions, such as BTRFS - I surrender! Good features BUT Complex, wastes time, not KISS, does not play well - Fedora Discussion

Despite massive warnings encountered everywhere I converted all hosts to a single partition of btrfs. This made switching backups from rsync to btrbk (based on btrfs send/receive) feasible. The resulting improvements are yet another great experience.

The reality is, that experienced administrators with basic technical knowledge, don’t let run upgrades/updates unattended in the background. It is always advises to inspect the list of packages to be updated/upgraded and have the possibilty for corrective actions prior start of the update/upgrade (excluding, locking, deinstallation, … of packages befor start). This is most relevant on Tumbleweed…

Experienced administrators follow the openSUSE mailing list and are able to control the update/upgrade by delaying it, modify the set of packages and so on. Blindly upgrading in the background without control over the process doesn’t fit the claim of experience and reality…

2 Likes

To OP - post

zypper se -si glibc

And - Keepass from TW? Maybe Keepassxc will help?

https://software.opensuse.org/package/keepassxc

zypper addrepo https://download.opensuse.org/repositories/security:keepassxc/15.5/security:keepassxc.repo
zypper refresh
zypper install keepassxc

opi lists alternatives:

3400g:~ # opi keepassxc
Searching repos for: keepassxc
1. keepassxc
2. keepassxc-lang
3. keepassxc-debuginfo
4. keepassxc-debugsource
5. keepassxc-proxy-rust
6. python39-keepassxc-browser
7. python310-keepassxc-browser
8. python311-keepassxc-browser
Pick a number (0 to quit): 1
You have selected package name: keepassxc
 1. openSUSE-Tumbleweed-Oss +                 | 2.7.6                     | x86_64
 2. openSUSE:Factory -                        | 2.7.6                     | x86_64
 3. security:keepassxc ?                      | 2.7.6                     | x86_64
 4. security:keepassxc:stable ?               | 2.6.3+git168.0450bf34     | x86_64
 5. home:Herbster0815 !                       | 2.8.x+git.20240102T071725 | x86_64
 6. home:ccgx !                               | 2.7.6                     | x86_64
 7. home:ecsos !                              | 2.7.6                     | x86_64
 8. home:lrupp !                              | 2.7.6                     | x86_64
 9. home:sp1rit:testing !                     | 2.7.6                     | x86_64
10. home:alveus:main !                        | 2.7.4                     | x86_64
11. home:stepech !                            | 2.7.4                     | x86_64
12. home:dirkmueller:Factory !                | 2.7.6                     | x86_64
Pick a number (0 to quit): 0
3400g:~ # 

You will note that in this case, the user sees patches available, but no updates available. Thus, they are not handled the same way.

How you manage your system is up to you. You have experience and enough of an understanding of the best practices to make a decision that works for you in your specific instance.

That is different than making a blanket statement that suggests that inexperienced users should make the same decision. They don’t have the experience or background to understand the consequences of their action and if those consequences are things they can live with.

You are getting off topic here. Let’s stay on topic and help the OP here with their issue.

1 Like

I tried to install the patches as suggested. The output is below. Now the system outputs “nothing to do” when running zypper up or zypper patch.

(before doing this I also removed the keepass repository as suggested above, if that makes any difference).

What has happened here?


W9020:/var/log # zypper patch 
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 2 NEW patches are going to be installed:
  openSUSE-SLE-15.5-2023-4003 openSUSE-SLE-15.5-2023-4110

The following 5 packages are going to be REMOVED:
  apparmor-docs glibc glibc-32bit glibc-extra nscd

5 packages to remove.
After the operation, 10.8 MiB will be freed.
Continue? [y/n/v/...? shows all options] (y): y

Checking for file conflicts: .................................................................................................................................................................[done]
( 1/10) Removing apparmor-docs-3.0.4-150500.11.6.1.noarch ....................................................................................................................................[done]
error: package apparmor-docs-3.0.4-150500.11.6.1.noarch is not installed
( 2/10) Removing apparmor-docs-3.0.4-150500.11.6.1.noarch ...................................................................................................................................[error]
Removal of (143178)apparmor-docs-3.0.4-150500.11.6.1.noarch(@System) failed:
Error: Subprocess failed. Error: RPM failed: Command exited with status 1.
Abort, retry, ignore? [a/r/i] (a): r
error: package apparmor-docs-3.0.4-150500.11.6.1.noarch is not installed
( 2/10) Removing apparmor-docs-3.0.4-150500.11.6.1.noarch ...................................................................................................................................[error]
Removal of (143178)apparmor-docs-3.0.4-150500.11.6.1.noarch(@System) failed:
Error: Subprocess failed. Error: RPM failed: Command exited with status 1.
Abort, retry, ignore? [a/r/i] (a): i
( 3/10) Removing glibc-2.31-150300.58.1.x86_64 ...............................................................................................................................................[done]
error: package glibc-2.31-150300.58.1.x86_64 is not installed
( 4/10) Removing glibc-2.31-150300.58.1.x86_64 ..............................................................................................................................................[error]
Removal of (143411)glibc-2.31-150300.58.1.x86_64(@System) failed:
Error: Subprocess failed. Error: RPM failed: Command exited with status 1.
Abort, retry, ignore? [a/r/i] (a): i
( 5/10) Removing glibc-32bit-2.31-150300.58.1.x86_64 .........................................................................................................................................[done]
error: package glibc-32bit-2.31-150300.58.1.x86_64 is not installed
( 6/10) Removing glibc-32bit-2.31-150300.58.1.x86_64 ........................................................................................................................................[error]
Removal of (143414)glibc-32bit-2.31-150300.58.1.x86_64(@System) failed:
Error: Subprocess failed. Error: RPM failed: Command exited with status 1.
Abort, retry, ignore? [a/r/i] (a): i
( 7/10) Removing glibc-extra-2.31-150300.58.1.x86_64 .........................................................................................................................................[done]
error: package glibc-extra-2.31-150300.58.1.x86_64 is not installed
( 8/10) Removing glibc-extra-2.31-150300.58.1.x86_64 ........................................................................................................................................[error]
Removal of (143418)glibc-extra-2.31-150300.58.1.x86_64(@System) failed:
Error: Subprocess failed. Error: RPM failed: Command exited with status 1.
Abort, retry, ignore? [a/r/i] (a): i
( 9/10) Removing nscd-2.31-150300.58.1.x86_64 ................................................................................................................................................[done]
error: package nscd-2.31-150300.58.1.x86_64 is not installed
(10/10) Removing nscd-2.31-150300.58.1.x86_64 ...............................................................................................................................................[error]
Removal of (145162)nscd-2.31-150300.58.1.x86_64(@System) failed:
Error: Subprocess failed. Error: RPM failed: Command exited with status 1.
Abort, retry, ignore? [a/r/i] (a): i

Also, the following command as requested ( I ran this command BEFORE the above )

zypper se -si glibc
Loading repository data...
Reading installed packages...

S  | Name              | Type    | Version            | Arch   | Repository
---+-------------------+---------+--------------------+--------+-------------------------------------------------------------
i+ | glibc             | package | 2.31-150300.63.1   | x86_64 | Update repository with updates from SUSE Linux Enterprise 15
i+ | glibc             | package | 2.31-150300.58.1   | x86_64 | Update repository with updates from SUSE Linux Enterprise 15
i  | glibc-32bit       | package | 2.31-150300.63.1   | x86_64 | Update repository with updates from SUSE Linux Enterprise 15
i  | glibc-32bit       | package | 2.31-150300.58.1   | x86_64 | Update repository with updates from SUSE Linux Enterprise 15
i  | glibc-devel       | package | 2.31-150300.63.1   | x86_64 | Update repository with updates from SUSE Linux Enterprise 15
i  | glibc-extra       | package | 2.31-150300.63.1   | x86_64 | Update repository with updates from SUSE Linux Enterprise 15
i  | glibc-extra       | package | 2.31-150300.58.1   | x86_64 | Update repository with updates from SUSE Linux Enterprise 15
i  | glibc-lang        | package | 2.31-150300.63.1   | noarch | Update repository with updates from SUSE Linux Enterprise 15
i  | glibc-locale      | package | 2.31-150300.63.1   | x86_64 | Update repository with updates from SUSE Linux Enterprise 15
i  | glibc-locale-base | package | 2.31-150300.63.1   | x86_64 | Update repository with updates from SUSE Linux Enterprise 15
i  | linux-glibc-devel | package | 5.14-150500.12.3.2 | x86_64 | Update repository with updates from SUSE Linux Enterprise 15

Post output of

rpm -qa glibc\*