Ticket #2057: udev-git-add-in-chroot-option.patch

File udev-git-add-in-chroot-option.patch, 4.5 KB (added by bryan@linuxfromscratch.org, 17 years ago)

Proposed patch against current udev git

  • udev.h

    Add an --in-chroot option to udevd.  Skips operations that can only happen once per machine,
    skips creating device files, and skips running RUN rules.
    
    diff --git a/udev.h b/udev.h
    index 33b39aa..82fe700 100644
    a b extern char udev_config_filename[PATH_SIZE];  
    103103extern char udev_rules_dir[PATH_SIZE];
    104104extern int udev_log_priority;
    105105extern int udev_run;
     106extern int udev_in_chroot;
    106107extern void udev_config_init(void);
    107108
    108109/* udev_device.c */
  • udev_device.c

    diff --git a/udev_device.c b/udev_device.c
    index 62217ff..647a6a8 100644
    a b int udev_device_event(struct udev_rules *rules, struct udevice *udev)  
    234234                }
    235235
    236236                /* look if we want to change the name of the netif */
    237                 if (strcmp(udev->name, udev->dev->kernel) != 0) {
     237                if (!udev_in_chroot && strcmp(udev->name, udev->dev->kernel) != 0) {
    238238                        char devpath[PATH_MAX];
    239239                        char *pos;
    240240
  • udevd.c

    diff --git a/udevd.c b/udevd.c
    index eb311df..0aabae1 100644
    a b  
    4848static int debug_trace;
    4949static int debug;
    5050
     51int udev_in_chroot;
     52
    5153static struct udev_rules rules;
    5254static int udevd_sock = -1;
    5355static int uevent_netlink_sock = -1;
    static int udev_event_process(struct udevd_uevent_msg *msg)  
    136138                alarm(udev->event_timeout);
    137139
    138140        /* run programs collected by RUN-key*/
    139         if (retval == 0 && !udev->ignore_device && udev_run)
     141        if (retval == 0 && !udev->ignore_device && udev_run && !udev_in_chroot)
    140142                retval = udev_rules_run(udev);
    141143
    142144        udev_device_cleanup(udev);
    static void udev_event_run(struct udevd_uevent_msg *msg)  
    233235        case 0:
    234236                /* child */
    235237                close(uevent_netlink_sock);
    236                 close(udevd_sock);
     238                if (!udev_in_chroot)
     239                        close(udevd_sock);
    237240                if (inotify_fd >= 0)
    238241                        close(inotify_fd);
    239242                close(signal_pipe[READ_END]);
    int main(int argc, char *argv[], char *envp[])  
    960963        static const struct option options[] = {
    961964                { "daemon", 0, NULL, 'd' },
    962965                { "debug-trace", 0, NULL, 't' },
     966                { "in-chroot", 0, NULL, 'c' },
    963967                { "debug", 0, NULL, 'D' },
    964968                { "help", 0, NULL, 'h' },
    965969                { "version", 0, NULL, 'V' },
    int main(int argc, char *argv[], char *envp[])  
    974978        dbg("version %s\n", UDEV_VERSION);
    975979
    976980        while (1) {
    977                 option = getopt_long(argc, argv, "dDthV", options, NULL);
     981                option = getopt_long(argc, argv, "dDcthV", options, NULL);
    978982                if (option == -1)
    979983                        break;
    980984
    int main(int argc, char *argv[], char *envp[])  
    985989                case 't':
    986990                        debug_trace = 1;
    987991                        break;
     992                case 'c':
     993                        udev_in_chroot = 1;
     994                        break;
    988995                case 'D':
    989996                        debug = 1;
    990997                        if (udev_log_priority < LOG_INFO)
    991998                                udev_log_priority = LOG_INFO;
    992999                        break;
    9931000                case 'h':
    994                         printf("Usage: udevd [--help] [--daemon] [--debug-trace] [--debug] [--version]\n");
     1001                        printf("Usage: udevd [--help] [--daemon] [--debug-trace] [--in-chroot] [--debug] [--version]\n");
    9951002                        goto exit;
    9961003                case 'V':
    9971004                        printf("%s\n", UDEV_VERSION);
    int main(int argc, char *argv[], char *envp[])  
    10211028                dup2(fd, STDERR_FILENO);
    10221029
    10231030        /* init sockets to receive events */
    1024         if (init_udevd_socket() < 0) {
     1031        if (!udev_in_chroot && init_udevd_socket() < 0) {
    10251032                if (errno == EADDRINUSE) {
    10261033                        fprintf(stderr, "another udev daemon already running\n");
    10271034                        err("another udev daemon already running\n");
    int main(int argc, char *argv[], char *envp[])  
    11901197        if (debug_trace)
    11911198                putenv("DEBUG=1");
    11921199
    1193         maxfd = udevd_sock;
    1194         maxfd = UDEV_MAX(maxfd, uevent_netlink_sock);
     1200        maxfd = uevent_netlink_sock;
    11951201        maxfd = UDEV_MAX(maxfd, signal_pipe[READ_END]);
    11961202        maxfd = UDEV_MAX(maxfd, inotify_fd);
    11971203
     1204        if (!udev_in_chroot)
     1205                maxfd = UDEV_MAX(maxfd, udevd_sock);
     1206
    11981207        while (!udev_exit) {
    11991208                struct udevd_uevent_msg *msg;
    12001209                int fdcount;
    12011210
    12021211                FD_ZERO(&readfds);
    12031212                FD_SET(signal_pipe[READ_END], &readfds);
    1204                 FD_SET(udevd_sock, &readfds);
    12051213                FD_SET(uevent_netlink_sock, &readfds);
    12061214                if (inotify_fd >= 0)
    12071215                        FD_SET(inotify_fd, &readfds);
     1216                if (!udev_in_chroot)
     1217                        FD_SET(udevd_sock, &readfds);
    12081218
    12091219                fdcount = select(maxfd+1, &readfds, NULL, NULL, NULL);
    12101220                if (fdcount < 0) {
    int main(int argc, char *argv[], char *envp[])  
    12141224                }
    12151225
    12161226                /* get control message */
    1217                 if (FD_ISSET(udevd_sock, &readfds))
     1227                if (!udev_in_chroot && FD_ISSET(udevd_sock, &readfds))
    12181228                        get_ctrl_msg();
    12191229
    12201230                /* get netlink message */
    exit:  
    12821292        if (signal_pipe[WRITE_END] >= 0)
    12831293                close(signal_pipe[WRITE_END]);
    12841294
    1285         if (udevd_sock >= 0)
     1295        if (!udev_in_chroot && udevd_sock >= 0)
    12861296                close(udevd_sock);
    12871297        if (inotify_fd >= 0)
    12881298                close(inotify_fd);