/dev/log létrehozása?

Fórumok

Sziasztok,

A kérdésem csupán annyi lenne, hogy a /dev/log fájl, pontosabban
socket hogy jön létre? Milyen paranccsal tudok socketet létrehozni?

Google-t megnéztem, ott mksock parancsot emlegettek, de sajna az
én disztrómban nincs olyan és nem tudom milyen csomagot kéne hozzá
letölteni.

A válaszokat előre is köszönöm

Hozzászólások

nem világos nekem, mit is szeretnél csinálni? minek neked a /dev/log???

--
by Mikul@s

A /dev/log socketet a naplózásért felelős program (pl. syslog-ng) hozza létre. Amikor egy folyamat ezt a socketet használja, tulajdonképpen a naplózó programmal lép kapcsolatba. Bár létrehozhatsz socket fájlt "csak úgy", annak nem lesz sok értelme, mivel a "túloldalon" nem fog válaszolni senki a kérésekre.

Valószínűleg azért nincs mksock vagy hasonló a disztródban (nálam sincs), mert nem nagyon van rá szükség. Nekem egyszer kísérletezéshez kellett, írtam egyet magamnak :). Ha érdekel, itt a forrás. De, még egyszer, nem hiszem, hogy tényleg szükséged lenne rá.

#include <stddef.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/un.h>

int make_named_socket (const char *filename) {
/* This function is from an example in chapter 16.5.3
   of the GNU C Library Reference Manual, v0.10   */
  struct sockaddr_un name;
  int sock;
  size_t size;

  /* Create the socket. */
  sock = socket (PF_LOCAL, SOCK_DGRAM, 0);
  if (sock < 0)
    {
      perror ("socket");
      exit (EXIT_FAILURE);
    }

  /* Bind a name to the socket. */
  name.sun_family = AF_LOCAL;
  strncpy (name.sun_path, filename, sizeof (name.sun_path));
  name.sun_path[sizeof (name.sun_path) - 1] = '\0';

  /* The size of the address is
     the offset of the start of the filename,
     plus its length,
     plus one for the terminating null byte.
     Alternatively you can just do:
     size = SUN_LEN (&name);
 */
  size = (offsetof (struct sockaddr_un, sun_path)
          + strlen (name.sun_path) + 1);

  if (bind (sock, (struct sockaddr *) &name, size) < 0)
    {
      perror ("bind");
      exit (EXIT_FAILURE);
    }

  return sock;
}

int main(int argc, char **argv) {
  if(argc != 2) {
    fprintf(stderr, "Usage: mksock filename\n");
    return EXIT_FAILURE;
  }
  make_named_socket(argv[1]);
  return EXIT_SUCCESS;
}

Köszi a kimerítő választ. Tényleg nem írtam le rendesen, hogy mire lenne szükségem és miért.

A cégnél van egy Zorp-os tűzfal, amin ntp fut chroot-ban. Nagyon tetszik ez a chrootos megoldás és
egy másik szerveren is meg akartam valósítani. Feltűnt, hogy a /var/chroot/ntp/dev alatt van egy
"null" node és egy "log" socket. A node-ot létre tudtam hozni, de a log socketet nem.

Ez a problémám forrása. És ezért sajna nem is naplózódnak az ntp cselekvései, úgyhogy nem nagyon tudom,
hogy az most működik-e vagy sem.
Ezért akarom/akartam létrehozni a "log" socketet, hogy a naplóba bekerüljenek az ntp bejegyzései is.

Üdv: Chris

Ha lényegében egy másolatot szeretnél készíteni a socket-ről a chroot-on belül, azt egy "bind mount"-tal megoldhatod:

touch /var/chroot/ntp/dev/log
mount --bind /dev/log /var/chroot/ntp/dev/log
chroot /var/chroot/ntp ...
umount /var/chroot/ntp/dev/log
rm /var/chroot/ntp/dev/log

Amikor létrehozod az első sorban, akkor még egy közönséges fájl, de a második sorban socket-té válik :). Innentől kezdve lényegében mindegy, hogy melyikhez csatlakozol, de a chroot-ból nyilván csak a belsőhöz tudsz. A mount-olást persze minden újraindításnál meg kell csinálni.

mkfifo
---
Reactor error - core dumped!